请,我有问题。我想获取Web api(news.api
)
但是我在执行retrofit
时遇到执行错误:
错误:java.lang.IllegalStateException:应为BEGIN_ARRAY,但在第1行第57列为BEGIN_OBJECT
感谢您的帮助
public interface ApiService {
@GET("top-headlines")
Call<ResponseNewsApi> getResponseNewsApi(@Query("sources") String source, @Query("apiKey") String apiKey);
}
public class ResponseNewsApi {
@SerializedName("status")
private String status;
@SerializedName("totalResults")
private String totalResults;
@SerializedName("articles")
private List<Post> articles;
}
public class Post {
@SerializedName("source")
private List<String> source;
@SerializedName("author")
private String author;
@SerializedName("title")
private String title;
@SerializedName("description")
private String description;
@SerializedName("url")
private String url;
@SerializedName("urlToImage")
private String urlToImage;
@SerializedName("publishedAt")
private String publishedAt;
@SerializedName("content")
private String content;
}
service.getResponseNewsApi(source,apiKey).enqueue(new Callback<ResponseNewsApi>() {
@Override
public void onResponse(Call<ResponseNewsApi> call, Response<ResponseNewsApi> response) {
Log.d(TAG, "onResponse response:: " + response);
if (response.body() != null) {
data.setValue(response.body());
Log.d(TAG, "posts total result:: " + response.body().getTotalResults());
Log.d(TAG, "posts size:: " + response.body().getArticles().size());
Log.d(TAG, "posts title pos 0:: " + response.body().getArticles().get(0).getTitle());
}
}
@Override
public void onFailure(Call<ResponseNewsApi> call, Throwable t) {
data.setValue(null);
Log.e(TAG,"Error get enqueue Retrofit");
Log.e(TAG,"Error: "+t.getMessage());
}
});
return data;
public class Source {
private String id;
private String name;
}
现在您必须像下面这样在source
类中更改Post
类型
@SerializedName("source")
//private List<String> source;
private Source source; // source is an object in your response json
希望它对您有帮助。
快乐编码
{
"status": "ok",
"totalResults": 10,
"articles": [
{
"source": {
"id": "ansa",
"name": "ANSA.it"
},
"author": "ANSA.it",
"title": "Bandiere a mezz'asta, Trieste a lutto - Ultima Ora",
"description": "Trieste ferita. Trieste listata a lutto. (ANSA)",
"url": "http://www.ansa.it/sito/notizie/topnews/2019/10/05/bandiere-a-mezzasta-trieste-a-lutto_2a4c44de-1f91-4e6d-a82d-b4a9747791a4.html",
"urlToImage": "http://www.ansa.it/webimages/img_700/2019/10/5/f7735dd33aad96bb9db93d42f5bb2c48.jpg",
"publishedAt": "2019-10-05T13:35:00Z",
"content": "(ANSA) - TRIESTE, 5 OTT - Trieste ferita. Trieste listata a\r\nlutto. Bandiere a mezz'asta su tutti gli edifici pubblici\r\ncittadini a cominciare dalla Questura dove in tarda mattinata si\r\nè tenuta una cerimonia alla presenza, fra gli altri, del\r\nQuestore, Giuse… [+819 chars]"
},
{
"source": {
"id": "ansa",
"name": "ANSA.it"
},
"author": "ANSA.it",
"title": "Bandiere a mezz'asta, Trieste a lutto - Ultima Ora",
"description": "Trieste ferita. Trieste listata a lutto. (ANSA)",
"url": "http://www.ansa.it/sito/notizie/topnews/2019/10/05/bandiere-a-mezzasta-trieste-a-lutto_2a4c44de-1f91-4e6d-a82d-b4a9747791a4.html",
"urlToImage": "http://www.ansa.it/webimages/img_700/2019/10/5/f7735dd33aad96bb9db93d42f5bb2c48.jpg",
"publishedAt": "2019-10-05T13:35:00Z",
"content": "(ANSA) - TRIESTE, 5 OTT - Trieste ferita. Trieste listata a\r\nlutto. Bandiere a mezz'asta su tutti gli edifici pubblici\r\ncittadini a cominciare dalla Questura dove in tarda mattinata si\r\nè tenuta una cerimonia alla presenza, fra gli altri, del\r\nQuestore, Giuse… [+819 chars]"
},
...
]
}