请,我有问题。我想获取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;
答案 0 :(得分:1)
发生此异常是因为您在List<String> source
类中使用Post
意味着您希望将source
作为array
,但是在您的JSON
响应中Object
。因此您必须将其更改为object
。
为您的源对象创建一个类,如下所示。
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
希望它对您有帮助。 快乐编码