我正在使用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调用图像?
答案 0 :(得分:1)
做这样的事情:
[1]当您点击LoadImage AsyncTask
按钮NEXT
下一步按钮时致电disable
。
[2]再次onPreExecute()
LoadImage AsyncTask
enable
NEXT
按FLAG
方法。
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。