java.lang.IllegalStateException:应为BEGIN_ARRAY,但已进行BEGIN_OBJECT改进

时间:2019-10-05 14:54:03

标签: java android retrofit illegalstateexception

请,我有问题。我想获取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;

1 个答案:

答案 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

希望它对您有帮助。 快乐编码