我正在使用 Retrofit2 向 Google Books API 提出请求并使用 GSON 转换器,但出现错误
ErrorExpected BEGIN_ARRAY 但在第 1 行第 2 列路径 $ BEGIN_OBJECT
这是我的
图书服务.java
public class BookService{
private static final String BASE_URL = "https://www.googleapis.com/";
private BookApiService mApiService;
private BookCallback mListener;
public BookService(BookCallback listener){
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build();
mApiService = retrofit.create(BookApiService.class);
mListener = listener;
}
public void getBooks(String query){
final ApiResponse apiResponse = new ApiResponse();
Call<List<Book>> call = mApiService.getBooks(query);
call.enqueue(new Callback<List<Book>>() {
@Override
public void onResponse(Call<List<Book>> call, Response<List<Book>> response) {
apiResponse.setBooks(response.body());
mListener.notifyDataReceived(apiResponse);
}
@Override
public void onFailure(Call<List<Book>> call, Throwable t) {
apiResponse.setError(t);
mListener.notifyDataReceived(apiResponse);
}
});
}
public interface BookCallback{
void notifyDataReceived(ApiResponse apiResponse);
}
}
和我的界面
BookApiService.java
public interface BookApiService {
@GET("/books/v1/volumes")
Call<List<Book>> getBooks(@Query("q") String query);
}
然后从实现 BookCallback的MainActivity.java发出请求
public class MainActivity extends AppCompatActivity implements BookService.BookCallback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main)
new BookService(this).getBooks("android");
}
}