java - Retrofit (Android) - 获取从回调返回的对象

标签 java android retrofit

尝试搜索这个问题,但找不到(可能是因为我对 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() 的 Activity。

最初,我在 ImgurAPI 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/

相关文章:

Android 推送通知(慢)

android - "local symbol ' __bss_start ' in global part of symbol table"仅在 Android NDK aarch64 构建中

android - Retrofit 2.X - Response vs Call - 推荐使用什么?

java - Jboss 7,如何迁移到infinispan 6

java - 选择 optthruput 或 gencon 哪个 GC 策略? IBM 网络空间 7

java - 如何将字符串转换为日期格式dd-MMM-yyyy格式?

具有多个客户端的 Java 即时通讯工具无法正常工作

android editText限制字符串长度而不是字符

android - 支持非阻塞 IO 的 Android HTTP 请求框架

android - 如何使用 Kotlin 协程获取 API 错误主体