这是我的AsyncTask,从适配器的getView调用:
class LoadImage extends AsyncTask<Object,Void,String>{
private ImageView imv;
private String path;
public LoadImage(ImageView imv) {
this.imv = imv;
}
Bitmap userAvatarStream = null ;
Bitmap IconStream = null;
URL IconURL;
ProgressDialog dialog;
@Override
protected void onPreExecute(){
//Setting all the variables by getting the ids from the layout
return;
}
@Override
protected String doInBackground(Object... params) {
try {
IconURL = new URL(cr.ImageUrl);
IconStream = BitmapFactory.decodeStream(IconURL.openConnection().getInputStream());
}
catch (MalformedURLException e){
e.printStackTrace();
}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result){
// ImageView user_avatar = (ImageView)v.findViewById(R.id.follower_user_avatar);
imv.setImageBitmap(IconStream);
return;
}
我在这里遇到的问题是图像不断加载。让我们说我向下滚动,如果我向上滚动列表,图像就会再次刷新。它不断打电话来获取图像。这种行为显然是不可取的,除非在一个地方,如果手机上的互联网发生故障并再次出现,这将有助于自动加载图像。但是,在当前的状态下,即使它一直在崩溃,因为它不断打电话。如何阻止AsyncTask这样做?
答案 0 :(得分:2)
只需将图像缓存到文件系统或内存中即可。
每次滚动列表时,都会调用getView
。如果您将图像加载方法放在getView
上并且没有使用图像缓存,那么它将一次又一次地下载图像。有一些开源图像加载器用于列表,具有缓存支持。
其中一个是droidFu
。它支持两级缓存。文件系统和内存。从以下链接获取droidFu。
答案 1 :(得分:0)
尝试使用布尔标志来检查图像是否已成功加载。
如果不是那么只调用Load Image Asynctask。
如果适配器中有多行,您可能需要使用布尔数组来保留轨道。
答案 2 :(得分:0)
试试这段代码:
class performBackgroundTask extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setMessage("Please wait ...");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected String doInBackground(String... arg0) {
callxmlparser();
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (ringtoneNamelist != null && ringtoneNamelist.size() > 0) {
songslist.setAdapter(new Songslist());
} else {
Toast.makeText(SongsList.this,"Network signal speed is too slow\ncannot parse the data from the server\n Please try again", Toast.LENGTH_LONG).show();
}
dialog.dismiss();
}
}