java.lang.IllegalStateException: ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT дооснащения - PullRequest
0 голосов
/ 05 октября 2019

Пожалуйста, у меня проблема. Я хочу получить все сущности на веб-API (news.api)

Но у меня ошибка выполнения, в то время как retrofit ответ:

Ошибка: java.lang.IllegalStateException:Ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1 столбца 57

Спасибо за вашу помощь

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 Ответ

1 голос
/ 05 октября 2019

Вы получили это исключение, потому что вы используете 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

Надеюсь, это поможет вам. Счастливое кодирование

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...