Android - ответ API возвращает ОК, но список пуст

Я использую Google Books API для отображения соответствующей информации о книгах (например, название, авторы, издатель ...) в recyclerview, и для этого я использую Retrofit2, все работает нормально, код состояния - 200 (что означает ОК согласно Google документация), но список, содержащий книги, пуст, ниже вы найдете код для каждого соответствующего класса, прикрепленного

Начиная с интерфейса API, который включает метод поиска книги по ее id:

import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Path;
import retrofit2.http.Query;

public interface ApiInterface {
    @GET("volumes/{id}")
    Call<BookResponce> getBooks(@Path("id") String id, @Query("API_KEY") String apiKey);
}

Вот класс экземпляра Retrofit, который я использую:

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class RetrofitInstance {
    private static Retrofit retrofit;
    private static final String BASE_URL = "https://www.googleapis.com/books/v1/";

    public static Retrofit getRetrofitInstance(){
        if (retrofit == null){
            retrofit = new retrofit2.Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        }
        return retrofit;
    }
}

Ниже представлен класс модели Book.java.

@SerializedName("id")
private String bookId;

@SerializedName("description")
private String bookDescription;

@SerializedName("title")
private String bookTitle;

@SerializedName("authors")
private List<String> bookAuthors = new ArrayList<>();

@SerializedName("averageRating")
private float bookRating;

А вот и класс Book Response.

@SerializedName("kind")
private String bkind;

@SerializedName("items")
private List<Book> results;

@SerializedName("totalItems")
private int totalItems;

Наконец, класс Main Activity

public static final String BOOKS_API_KEY = "...";
private List<Book> bookList = new ArrayList<>();
private RecyclerView rv;
private BookAdapter mAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    rv = (RecyclerView) findViewById(R.id.recycler_a);

    mAdapter = new BookAdapter(bookList);

    rv.setLayoutManager(new LinearLayoutManager(this));
    rv.setAdapter(mAdapter);

    DisplayBook();
}

private void DisplayBook(){
    ApiInterface apiService =
            RetrofitInstance.getRetrofitInstance().create(ApiInterface.class);

    retrofit2.Call<BookResponce> call = apiService.getBooks("zyTCAlFPjgYC", BOOKS_API_KEY);
    call.enqueue(new Callback<BookResponce>() {
        @Override
        public void onResponse(retrofit2.Call<BookResponce> call, Response<BookResponce> response) {
            int statusCode = response.code();
            int totalItems = response.body().getTotalItems();
            List<Book> books = response.body().getResults();
            bookList = books;
            mAdapter.notifyDataSetChanged();

            Toast.makeText(getApplicationContext(), "code: "+statusCode+" | total "+totalItems, Toast.LENGTH_LONG).show();
        }

        @Override
        public void onFailure(retrofit2.Call<BookResponce> call, Throwable t) {
            Toast.makeText(getApplicationContext(), "fail", Toast.LENGTH_LONG).show();
        }
    });     
}

Учтите, что основная проблема здесь:

STATUS CODE = 200 (Success)
but
TOTAL ITEMS RETURNED = 0 /** List<Book> books = response.body().getResults(); */

Попробуйте в почтальоне.

Sreedev P R 20.11.2018 06:21
developers.google.com/books/docs/v1/using#RetrievingVolume согласно этой ссылке, ваши модели сильно отличаются от того, какими они должны быть. Какой документации вы следите?
Fred 20.11.2018 09:17

@Fred, что именно не так в моих моделях?

Thorvald 20.11.2018 09:53

На мой взгляд, когда вы называете эту конечную точку «googleapis.com/books/v1/volumes {id}», вы ожидаете список Book под именем items, но это не то, о чем говорится в документации. В нем говорится, что вы получили 1 книгу, и информация о ней находится под объектом json с ключом volumeInfo.

Fred 20.11.2018 10:14

@ ThorvaldÓlavsenV. Вы смогли это решить? Я столкнулся с той же проблемой.

Cflux 15.10.2019 16:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
204
0

Другие вопросы по теме