2016-04-01 13 views
0

AsyncTask'ı anlamada sorun yaşıyorum. Bir dosya konumu gönderirim, böylece onu alabilir, yeniden boyutlandırabilir ve geri verebilir. Ben bir asalctask sınıfı benim bazAdapter ListView olan aktivitemden aradığımda, bir tür uyuşmazlığı alıyorum.Java'da AsyncTask uygulamasından döndürülen bir BitMap'in alınması

Bitmap'i yürütmeden döndürebileceğimi düşündüm. Ben OnPostExecute() kullanmak gerekir ama emin olduğumu okudum nasıl ..

public class ImageHandler extends AsyncTask<String, Void, Bitmap> { 
     Bitmap sizedBMP = null; 
     @Override 

     protected Bitmap doInBackground(String... params) { 

      File imgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath(), "/"+params[0]+"/"+params[0]+".png"); 
      if (imgFile.exists()){ 
       Bitmap bmp = BitmapFactory.decodeFile(imgFile.toString()); 
       int newWidth = 500; 
       sizedBMP = getResizedBitmap(bmp, newWidth); 

      } 
      else{ 
       //set no image available 
      } 
      return sizedBMP; 

     } 

     @Override 
     // Once the image is downloaded, associates it to the imageView 
     protected void onPostExecute(Bitmap sizedBMP) { 

     } 


    public Bitmap getResizedBitmap(Bitmap bm, int newWidth) { 
     // Bitmap gets resized here..... 

     } 
} 

ben gibi) (GetView içinde bu sınıf sesleniyorum:

ImageHandler imgHandler = new ImageHandler(); 
Bitmap bitMap; 
bitMap = imgHandler.execute(filename); 

Hata:

Type mismatch: cannot convert from AsyncTask to Bitmap

+0

[Picasso] (https://github.com/square/picasso), [Glide] (https://github.com/bumptech/glide), [Fresco] kullanmama nedenlerinden herhangi biri (https://github.com/facebook/fresco) veya başka bir resim yükleme kitaplığı? –

+0

Birisi kayma önerdi, ama kendimi nasıl çalıştırılacağını öğrenmek istedim sanırım. – silversunhunter

cevap

0

.execute yöntemi geçerli AsyncTask değerini döndürür. Sonucu ayarlamak için, bitmap'i göstermek için kullanmak istediğiniz görüntü görüntüsünü parametreli bir kurucu ekleyin.

ImageHandler imgHandler = new ImageHandler(myImageView); 
imgHandler.execute(filename); 

görüntü yükleyici bu tip kullanmak istiyorsanız çalışır ancak, liste görünümü kaydırma başka sorun olabilir olmalıdır:

public class ImageHandler extends AsyncTask<String, Void, Bitmap> { 

     Bitmap sizedBMP = null; 
     ImageView imageView; 

     public ImageHandler(ImageView imageView){ 
      this.imageView = imageView; 
     } 

     @Override 
     protected Bitmap doInBackground(String... params) { 

      File imgFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsolutePath(), "/"+params[0]+"/"+params[0]+".png"); 
      if (imgFile.exists()){ 
       Bitmap bmp = BitmapFactory.decodeFile(imgFile.toString()); 
       int newWidth = 500; 
       sizedBMP = getResizedBitmap(bmp, newWidth); 

      } 
      else{ 
       //set no image available 
      } 
      return sizedBMP; 

     } 

     @Override 
     // Once the image is downloaded, associates it to the imageView 
     protected void onPostExecute(Bitmap sizedBMP) { 
       if(sizedBMP != null){ 
        imageView.setImageBitmap(sizedBMP); 
       } 
     } 


    public Bitmap getResizedBitmap(Bitmap bm, int newWidth) { 
     // Bitmap gets resized here..... 

     } 
} 

ve sonra bu yol gibi kurucusundaki imageView set - Bir satırdaki tek bir ImageView yuvası için birkaç bitmap, birkaç saniye boyunca birbirinin yerini alacak. Konuyla ilgili size yardımcı olabilir

This.