处理类中的AsyncTask

时间:2012-12-15 10:13:30

标签: android android-asynctask

我正在使用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调用图像?

2 个答案:

答案 0 :(得分:1)

做这样的事情:

[1]当您点击LoadImage AsyncTask按钮NEXT下一步按钮时致电disable

[2]再次onPreExecute() LoadImage AsyncTask enable NEXTFLAG方法。

OR,

您也可以使用简单的{{1}}来实现这些目标。通过将其设置为true和false。

希望这会对你有所帮助。

感谢。

答案 1 :(得分: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。