我怎样才能返回onComplete方法中的变量“realImage”?

时间:2017-09-10 13:19:26

标签: java android

我在一个活动中创建了一个Asynctask,现在我想将变量“realimage”返回到Asynctask,但我似乎无法访问它...

public class PhotoUtils
{
public static Photo getImage(String id)
{
    unsplash.getPhoto(id, new Unsplash.OnPhotoLoadedListener()
    {
        @Override
        public void onComplete(Photo photo)
        {
            Photo realImage=photo;
        }

        @Override
        public void onError(String error)
        {

        }
    });

    return realImage; //This line shows error that cannot resolve symbol 
                        realImage
}
}

这是我在其他活动中的异步任务

public class ImageTask extends AsyncTask<Photo,Void,Photo>
{

    @Override
    protected Photo doInBackground(Photo... photos)
    {
            Intent intent=getIntent();

            Bundle bd=intent.getExtras();

            String getId = (String) bd.get("id");

            Photo finalPhoto=PhotoUtils.getImage(getId);

            return finalPhoto;
    }

    @Override
    protected void onPostExecute(Photo finalPhoto) {
        tv1.setText(finalPhoto.getId());
        super.onPostExecute(finalPhoto);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,看起来你甚至不需要Asynctask。 Look at the example code

其次,你不能那样回归。

OnPhotoLoadedListener是异步回调。

只需在onComplete内正常使用图片。

如果需要将图像传回给调用方法,请将回调提取为参数。

// this is void now 
public static void getImage(String id, Unsplash.OnPhotoLoadedListener listener) {
    unsplash.getPhoto(id, listener);
});

将其称为

PhotoUtils.getImage(id, new Unsplash.OnPhotoLoadedListener() {
    // Use image in here 
});

其中,如果仔细观察,您所做的只是将unsplash.getPhoto的正常用法替换为PhotoUtils.getImage,这可能是您想要的,但您可以使用单一模式完成类似的方法。 unsplash实例变量。这样,您就不会重写所有Unsplash API调用