在android中使用asyncTask在listview中加载图像
我目前正在使用asynctask加载图像。我引用了一个示例类。但是,那里的位图结果为空。这是为什么?我如何解决这个问题?谢谢代码如下所示在android中使用asyncTask在listview中加载图像,android,image,listview,android-asynctask,Android,Image,Listview,Android Asynctask,我目前正在使用asynctask加载图像。我引用了一个示例类。但是,那里的位图结果为空。这是为什么?我如何解决这个问题?谢谢代码如下所示 package com.example.json; import java.io.File; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Environment; i
package com.example.json;
import java.io.File;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
class ImgAdapter extends AsyncTask<Object, Void, Bitmap> {
private ImageView imv;
private String path;
public ImgAdapter(ImageView imv) {
this.imv = imv;
this.path = imv.getTag().toString();
}
@Override
protected Bitmap doInBackground(Object... params) {
Bitmap bitmap = null;
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + path);
if (file.exists()) {
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if (!imv.getTag().toString().equals(path)) {
/*
* The path is not same. This means that this image view is handled
* by some other async task. We don't do anything and return.
*/
return;
}
if (result != null && imv != null) {
Log.i("test","success");
imv.setVisibility(View.VISIBLE);
imv.setImageBitmap(result);
} else {
Log.i("test","result=" + String.valueOf(result == null)); //result is null here
Log.i("test","imv=" + String.valueOf(imv == null));
Log.i("test","fail");
imv.setVisibility(View.GONE);
}
}
}
更改此项:
Bitmap bitmap = null;
File file = new File(Environment.getExternalStorageDirectory()
.getAbsolutePath() + path);
if (file.exists()) {
bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
}
为此:
Bitmap bitmap = ((BitmapDrawable)imv.getDrawable()).getBitmap();
检查此链接。您不需要将imageview传递给任务,只需要在适配器中用返回的图像填充数据集,然后在getView中相应地更改图像。上面的实现是错误的,您的意思是我应该在listview适配器中将URL设置为imageview吗?asynctask类的功能只是返回更新URL?你能举个例子吗,谢谢。我在做类似的事情!!!您可能希望看到我自己对我的问题的回答:感谢您的回答,但BitmapDrawable无法解析为类型?导入android.graphics.drawable.BitmapDrawable;
Bitmap bitmap = ((BitmapDrawable)imv.getDrawable()).getBitmap();