2013-07-30 4 views
0

В настоящее время я работаю над использованием asynctask для загрузки изображения. Я имею ссылку на примерный класс. Однако результат Bitmap имеет значение null. Почему это и как я могу исправить проблему? Благодарю. Код показан ниже.Использование asyncTask для загрузки изображения в listview в android

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); 
     } 
    } 
} 

Как позвонить в ListView адаптер:

public View getView(int arg0, View arg1, ViewGroup arg2) { 
ImageView thumbnail = (ImageView) arg1.findViewById(R.id.imageView1); 
ShopEntry entry = getItem(arg0); 
thumbnail.setTag(entry.image_url); 
new ImgAdapter(thumbnail).execute(); 
return arg1; 
} 
+1

Проверить эту ссылку. http://stackoverflow.com/questions/2471935/how-to-load-an-imageview-by-url-in-android –

+0

Спасибо Я прочитал его сейчас – user782104

+1

Вместо передачи ImageView к задаче, вы просто необходимо заполнить свой набор данных в адаптере возвращенным изображением, а затем в getView соответствующим образом изменить изображения. Выше реализации багги –

ответ

1

изменить это:

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(); 
+0

Спасибо за ответ, но BitmapDrawable не может быть разрешен для типа? – user782104

+0

import android.graphics.drawable.BitmapDrawable; – fenix

Смежные вопросы