Android - вернуть идентификатор книги с помощью Google BooksAPI - PullRequest
0 голосов
/ 01 декабря 2018

Я использую Google Books API для отображения списка различных книг путем поиска терминов, запросов ....

Пока все работает так, как и должно быть, хотя одна проблема, мне нужночтобы получить книгу по ее идентификатору, я считаю, что проблема в моем BookResponse классе

ОБНОВЛЕНИИ Я подумал, что мне нужно добавить сериализованный идентификатор в BookItems классе, но я незнать, куда идти оттуда

PS.ниже вы найдете каждый класс и прикрепленное изображение для отображения структуры JSON

Поиск в MainActivity

ApiInterface apiService =
            RetrofitInstance.getRetrofitInstance().create(ApiInterface.class);

    retrofit2.Call<BookResponce> call = apiService.getBooksById("zyTCAlFPjgYC", BOOKS_API_KEY);
    call.enqueue(new Callback<BookResponce>() {
        @Override
        public void onResponse(retrofit2.Call<BookResponce> call, Response<BookResponce> response) {
            bookResp = response.body();
            for (int i = 0; i == 0; i++){
                bookList.add(i, bookResp.getBooks().get(i).getBookData());
            }

            cAdapter.notifyDataSetChanged();
        }

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

BookResponse class

public class BookResponce {
    @SerializedName(value="items")
    ArrayList<BookItems> bookItems;

    @SerializedName(value="totalItems")
    int totalItems;

    public int getTotalItems() { return totalItems; }
    public ArrayList<BookItems> getBooks() { return bookItems; }
}

Класс BookItems

public class BookItems {
    //This is what I added
    @SerializedName(value = "id")
    String id;

    @SerializedName(value="volumeInfo")
    Book bookData;

    //and this...
    public String getId() {
        return id;
    }

    public Book getBookData(){return bookData; }
}

Класс интерфейса API

public interface ApiInterface {

    @GET("volumes/{id}")
    Call<BookResponce> getBooksById(@Path("id") String bookId, 
        @Query("API_KEY") String apiKey);

    @GET("volumes")
    Call<BookResponce> getBooksByQuery(@Query("q") String query, 
        @Query("API_KEY") String apiKey, @Query("maxResults") int maxResults);
}

1 Ответ

0 голосов
/ 02 декабря 2018

когда вы выполняете поиск, после добавления элементов в bookList просто добавьте:

bookList.get(i).setBookId(bookResp.getBooks().get(i).getId());

Вот полный пример в вашем случае:

ApiInterface apiService =
        RetrofitInstance.getRetrofitInstance().create(ApiInterface.class);

retrofit2.Call<BookResponce> call = apiService.getBooksById("zyTCAlFPjgYC", BOOKS_API_KEY);
call.enqueue(new Callback<BookResponce>() {
    @Override
    public void onResponse(retrofit2.Call<BookResponce> call, Response<BookResponce> response) {
        bookResp = response.body();
        for (int i = 0; i == 0; i++){
            bookList.add(i, bookResp.getBooks().get(i).getBookData());

            //This is what you must add
            bookList.get(i).setBookId(bookResp.getBooks().get(i).getId());
        }

        cAdapter.notifyDataSetChanged();
    }

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

Если у кого-то есть более оптимальное решение, можете редактировать / добавлять его!

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