Android-Google Books API改装

我正在尝试将Google Books API与Retrofit结合使用,它返回的结果为空.

这是网址:
https://www.googleapis.com/books/v1/volumes?q=9781451648546

在Retrofit中,我有一个界面:

public interface IServiceEndPoint {
  @GET("https://www.googleapis.com/books/v1/volumes?q=9781451648546")
  Call<BookList> getBooks();
}

在我的webservice类中,我具有以下方法:

public void getBooks(final Callback<BookList> callback){
  IServiceEndPoint endPoint = mRetrofit.create(IServiceEndPoint.class);
  Call<BookList> call = endPoint.getBooks();
  call.enqueue(callback);
}

在活动类中,我有方法:

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类Book和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;
    }
}

在清单文件中,我添加了

使用权限android:name =“ android.permission.INTERNET

mBooks返回的是空值,我该如何解决?
谢谢.

编辑:shuvro的答案帮助我纠正了问题.我也忘记了在Book类中包含volumeInfo.我的课目如下:

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;
    }
}

谢谢大家的帮助!

解决方法:

在gradle文件中添加这两个依赖项.

compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'

创建一个类,让ServiceGenerator坐下,您的类应该是这样的

public class ServiceGenerator {


    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl("https://www.googleapis.com/books/v1/")
                    .addConverterFactory(GsonConverterFactory.create());

    public static <S> S createService(Class<S> serviceClass) {
        Retrofit retrofit = builder.client(httpClient.build()).build();
        return retrofit.create(serviceClass);
    }
}

现在,您这样声明接口

public interface IServiceEndPoint {
  @GET("volumes")
  Call<BookList> getBooks(@Query("q") String id);
}

现在处于活动状态或处于碎片状态,以这种方式使用改造

IServiceEndPoint serviceEndPoint = ServiceGenerator.createService(IServiceEndPoint.class)

Call<BookList> call = serviceEndPoint.getBooks("9781451648546");

 call.enqueue(new Callback<BookList>() {
        @Override
        public void onResponse(Call<BookList> call, Response<BookList> response) {
         //do whatever you want to do 
        }

        @Override
        public void onFailure(Call<BookList> call, Throwable t) {

        }
    });
上一篇:使用JSend格式的Retrofit将JSON响应转换为POJO?


下一篇:java-Retrofit对象返回为null