尝试搜索此问题,但找不到(可能由于我对Java / Retrofit的经验不足)。

我得到ImgurAPI类的实例并调用ImgurAPI::getImage()

ImgurAPI imgurAPI = ImgurAPI.getInstance();
Image image = ImgurAPI.getImage(someIDHere);


我请求获取图像并获得响应:

public Image getImage(final String id) {
    Image requestedImage = null;

    imgurService.getImage(id, new Callback<Image>() {
        @Override
        public void success(Image image, Response response) {
            //I need to get requestedImage = image to return
        }

        @Override
        public void failure(RetrofitError error) {
            System.out.println("Failed: " + error.toString());
        }
    });
    return requestedImage;
}


我遇到的问题是确定将success()中返回的图像返回到称为ImgurAPI::getImage()的活动的正确方法。

最初,我在ImgurAPI Image image中有一个全局变量,然后将其分配给检索到的Image,然后返回该变量:return ImgurAPI.image;。它有效,但感觉不正确。

有没有人建议正确执行此操作?还是我走错路了?

解决方案编辑

得到几个答案后,我能够进行更多搜索,并找到了解决此问题的方法:

ImgurAPI imgurAPI = ImgurAPI.getInstance();
imgurAPI.getImage("OhERyMa", new Callback<Image>() {
    @Override
    public void success(Image image, Response response) {
        // Simple test to check for functionality
        Context context = getApplicationContext();
        String link = image.getData().getLink();
        LinearLayout ll = (LinearLayout)findViewById(R.id.imageScrollerLayout);
        ImageView iv = new ImageView(context);
        Picasso.with(context).load(link).into(iv);
        ll.addView(iv);
    }

    @Override
    public void failure(RetrofitError error) {
        System.out.println(error.toString());
    }
});


现在,ImgurAPI::getImage()包含:

public void getImage(final String id, Callback<Image> callback) {
    imgurService.getImage(id, callback);
}

最佳答案

这是不可能的。 ImgurService.getImage(...)方法是异步的,您不能(不应)同步等待它完成。而是使用Callback<Image>执行您的方法将返回图像时要执行的代码。

关于java - Retrofit(Android)-从回调返回对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30833659/

10-10 01:40