不会改变onResponse()和onFailure()方法的调用

时间:2017-08-16 21:59:14

标签: java android json retrofit retrofit2

我的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);
}

0 个答案:

没有答案