在android中使用asyncTask在listview中加载图像

在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

我目前正在使用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;
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();