Я пытаюсь использовать API книг google с Retrofit, он возвращает пустой результат.google books api retrofit
это URL:
https://www.googleapis.com/books/v1/volumes?q=9781451648546
В Модернизированный У меня есть интерфейс:
public interface IServiceEndPoint {
@GET("https://www.googleapis.com/books/v1/volumes?q=9781451648546")
Call<BookList> getBooks();
}
в моей webservice class
У меня есть следующий метод:
public void getBooks(final Callback<BookList> callback){
IServiceEndPoint endPoint = mRetrofit.create(IServiceEndPoint.class);
Call<BookList> call = endPoint.getBooks();
call.enqueue(callback);
}
в activity class
I имеют метод:
private void getBooks(){
WebserviceHelper.getmInstance().getBooks(new Callback<BookList>() {
@Override
public void onResponse(Call<BookList> call, Response<BookList> response) {
mBooks = response.body().getResults();
mBookAdapter.update(mBooks);
}
@Override
public void onFailure(Call<BookList> call, Throwable t) {
}
});
}
У меня есть класс Java Книга и Booklist.
public class Book implements Serializable {
@SerializedName("id")
private String id;
@SerializedName("title")
private String title;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
public class BookList extends Book implements Serializable {
@SerializedName("results")
private List<Book> results;
public List<Book> getResults() {
return results;
}
public void setResults(List<Book> results) {
this.results = results;
}
}
В файле манифеста я добавил
использует-разрешение андроида: Name = "android.permission.INTERNET
mBooks возвращает нулевое значение, как я мог бы решить эту проблему
? Спасибо.
EDIT:shuvro ответ помогли мне исправить проблему. Я также забыл включить volumeInfo в мой класс Book. Моя книга класс выглядит, как следует в настоящее время:
public class Book implements Serializable {
@SerializedName("id")
private String id;
private VolumeInfo volumeInfo;
public VolumeInfo getVolumeInfo() {
return volumeInfo;
}
public void setVolumeInfo(VolumeInfo volumeInfo) {
this.volumeInfo = volumeInfo;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Кроме того, я создал класс volumeInfo:
public class VolumeInfo {
private String title;
private String subtitle;
private String publisher;
private String description;
public String getSubtitle() {
return subtitle;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Спасибо всем за помощь!
Проверьте способ onFailure, в Throwable t, вероятно, описал вашу проблему. Например. добавьте t.printStackTrace(); на тело метода onFailure и проверьте свой логарифм. –
спасибо за ответ, я ничего не вижу в своем логарифме, я вижу, что значение mBooks равно null в режиме отладки – itnoob
Вы изменили свой onFailure таким образом? @Override public void onFailure (Call call, Throwable t) { t.printStackTrace(); } –