我正在使用Retrofit的enqueue()
方法进行调用。我在我的MainActivity的onCreate()
中调用我的refreshImages()
,refreshImages()
然后调用一个方法refreshImagesIds()
,该方法应该调用Flickr的API并返回一个PhotosList
对象,然后我将从那里拉出Photos
,它将包含Photo
对象的列表。我的问题是,由于某种原因,我的enqueue()
方法中的onResponse()
永远不会被调用。当我使用调试器时,它会跳过它,当我将Log语句放入其中时,它们永远不会被写出来。我知道它所访问的端点是正确的,因为我可以使用OkHttp的记录器看到它,并且我的POJO对于返回的数据来说都是正确的。
知道为什么这不管用吗下面是我的refreshImages
和refreshImagesId
。这些都包含在我的MainActivty和修改类级变量中。
private void refreshImages() {
// make api call
//imageUrls = FlickrServiceManager_withinterface.getKittenImages(8);
refreshImageIds();
List<Photo> photos = photosList.getPhotos().getPhoto();
imageIds = new ArrayList<String>();
for(Photo photo : photos) {
Log.d("TAG", "It is pringint imageIds: " + photo.getId());
imageIds.add(photo.getId());
}
}
private void refreshImageIds() {
Retrofit retrofit = Api.getRestAdapter();
FlickrServiceInterface flickrService = retrofit.create(FlickrServiceInterface.class);
Call<PhotosList> call = flickrService.getPhotos(API_KEY, FORMAT, "1");
imageIds = new ArrayList<String>();
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");
}
});
}
我的FlickrServiceInterface:
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);
}
3条答案
按热度按时间ddrv8njm1#
更改对同步改进API的调用:
请注意,您需要在
AsyncTask
上调用此方法编辑
你也可以继续使用enqueue,但是你需要提供一个“onFinish”钩子,这样你就知道你的数据何时被接收,然后你用数据“通知”客户端:
然后接收这个接口并发送数据:
调用方法:
我通常使用像EventBus这样的库来使它更容易,我真的推荐给你。
lzfw57am2#
如果我错了,请纠正我,这是主线程吗?这将造成不等答复的问题。
考虑使用
async
chhkpiq43#
我不知道它是否有帮助,但我认为我的调用。enqueue()被跳过,但我没有处理我得到的响应,我得到了一个400响应。所以我建议你记录你得到的响应代码。希望它能帮助某人。