我的MainActivity中有一个API调用,如下所示:
private void refreshImageIds() {
Retrofit retrofit = Api.getRestAdapter();
FlickrServiceInterface flickrService = retrofit.create(FlickrServiceInterface.class);
Call<PhotosList> call = flickrService.getPhotos(API_KEY, FORMAT, "1");
call.enqueue(new Callback<PhotosList>(){
@Override
public void onResponse(Call<PhotosList> call, Response<PhotosList> response) {
photosList = response.body();
}
@Override
public void onFailure(Call<PhotosList> call, Throwable t) {
// TODO: Clean up
Log.d("TEMP_TAG", "Call failed");
}
});
}
所以我从refreshImageIds()
调用此onCreate()
方法从网络中提取一些数据。我的问题是我的photosList
对象永远不会被设置。这是一个类级变量。
当我单步执行调试器时,我可以看到它正在转到enqueue()
,然后跳过它。任何想法是什么问题?我的POJO似乎都设置正确,我使用OkHttp记录器来查看它正在调用的URL,这看起来很好。当我在浏览器中输入URL时,我看到了预期的JSON。
由于这个photosList
永远不会被设置并保持为null,因此稍后会在我的应用中导致nullpointerexception。
我的其他相关课程如下。
Api.java:
public class Api {
private static Retrofit retrofit = null;
public static Retrofit getRestAdapter(){
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
retrofit = new Retrofit.Builder()
.baseUrl("https://api.flickr.com/services/rest/")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
return retrofit;
}
}
FlickrServiceInterface.java:
public interface FlickrServiceInterface {
@GET("?method=flickr.photos.getSizes")
Call<PhotoSizes> getPhotoSizes(@Query("api_key") String apiKey, @Query("format") String format, @Query("nojsoncallback") String jsonCallback, @Query("photo_id") String photoId);
@GET("?method=flickr.photos.getRecent")
Call<PhotosList> getPhotos(@Query("api_key") String apiKey, @Query("format") String format, @Query("nojsoncallback") String jsonCallback);
}