1

我正在使用 AsyncTask 类来处理来自服务器的图像以在 ImageView 中显示它
我的代码中有一个 Next 按钮来使用以下代码调用下一个图像:

private class LoadImage extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPostExecute(Void result) {

        if (imgque != null) {
            imgSelectedQue.setImageDrawable(imgque);
            if (getActivity() != null) {
                adjustResourceEnvelope();
            }
        }

    }

    @Override
    protected void onPreExecute() {
        imgque = null;
        imgSelectedQue.setImageDrawable(null);
        imgSelectedQue.requestLayout();
    }

    @SuppressWarnings("deprecation")
    @Override
    protected Void doInBackground(Void... params) {
        InputStream is;
        try {
            is = (InputStream) new URL(Constants.PLAYER_SERVICE_BASE_URL + "/playerservice"
                    + imageurl).getContent();
            imgque = Drawable.createFromStream(is, null);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            imgque = null;
            e.printStackTrace();
        }

        return null;

    }
}

现在的问题是,如果我重复单击下一个按钮,那么它会多次调用 AsyncTask,并且 ImageView 会显示所有图像,例如“幻灯片放映”,因为所有 url 图像都在队列中
有没有办法只显示最后一个 AsyncTask 调用图像?

4

2 回答 2

1

做这样的事情:

[1] 当您LoadImage AsyncTask点击NEXT按钮disableNEXT 按钮时调用。

[2]再次打开按钮的onPreExecute()方法。LoadImage AsyncTask enableNEXT

或者,

您也可以使用 simple 来实现这些目标FLAG。通过将其设置为真假。

希望这对您有所帮助。

谢谢。

于 2012-12-15T10:19:46.783 回答
0

我找到了解决方案。
如果有人面临同样的问题。
我添加了新行

if (loadimage != null)
 {
   loadimage.cancel(true);
   loadimage = null;
}

loadimage.cancel(true) will stop the AsyncTask if it is already Running

然后执行 AsycTask()

loadimage = new LoadImage();
loadimage.execute();

通过这种方式,我只能调用我需要的最后一个 AsyncTask。

于 2012-12-15T11:09:34.287 回答