2016-04-01 1 views
0

AsyncTaskの理解に問題があります。私はそれを取得し、サイズを変更してそれを返すことができるようにファイルの場所を送信しています。 BaseAdapter ListViewである自分のアクティビティからasynctaskクラスを呼び出すと、型の不一致が発生します。JavaのAsyncTaskからBitMapを取得する

私は実行からビットマップを返すことができると思った。私はonPostExecute()を使用する必要がなく、わからないだということを読んだか..

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..... 

     } 
} 

私が好き)(getViewメソッド内でこのクラスを呼び出しています:

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

エラー:

Type mismatch: cannot convert from AsyncTask to Bitmap

+0

あなたが[Picasso](https://github.com/square/picasso)、[Glide](https://github.com/bumptech/glide)、[Fresco] https://github.com/facebook/fresco)またはその他の画像ローディングライブラリ –

+0

誰かがグライドを提案しましたが、私はそれが自分自身を動作させる方法を学びたかったと思います。 – silversunhunter

答えて

0

メソッド.executeは、現在のAsyncTaskを返します。結果を設定するには、ビットマップを表示するために使用するパラメータを持つコンストラクタを追加します。

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

あなたがイメージローダのこのタイプを使用したい場合は作品はしかし、リストビューのスクロールあなたは他の問題を有していても良いはずです。

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..... 

     } 
} 

、その後は、この方法のようにコンストラクタでImageViewの設定しました - 行内の単一のImageViewスロットの場合、いくつかのビットマップが数秒間お互いを置き換えます。

Thisトピックはあなたに役立つことができます。

関連する問題