Я использую 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;
Теперь, вот класс Откликов Книг
@SerializedName("kind")
private String bkind;
@SerializedName("items")
private List<Book> results;
@SerializedName("totalItems")
private int totalItems;
Наконец, класс Основной Деятельности
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(); */