2012-02-08 13 views
0

これは、アダプタのgetViewメソッドから呼び出され、私のAsyncTaskです:AsyncTaskイメージのロード中に停止しません。

class LoadImage extends AsyncTask<Object,Void,String>{ 

     private ImageView imv; 
     private String path; 

     public LoadImage(ImageView imv) { 
      this.imv = imv; 

     } 

     Bitmap userAvatarStream = null ; 
      Bitmap IconStream = null; 
      URL IconURL; 

      ProgressDialog dialog; 
      @Override 
       protected void onPreExecute(){ 
        //Setting all the variables by getting the ids from the layout 


       return; 

       } 


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

        try { 
         IconURL = new URL(cr.ImageUrl); 
         IconStream = BitmapFactory.decodeStream(IconURL.openConnection().getInputStream()); 


        } 

        catch (MalformedURLException e){ 
         e.printStackTrace(); 
        } 
        catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        return null; 
       } 


       protected void onPostExecute(String result){ 
         // ImageView user_avatar = (ImageView)v.findViewById(R.id.follower_user_avatar); 

        imv.setImageBitmap(IconStream); 


         return; 


       } 

私はここに来る問題は、イメージがロードしておくことです。私がリストを上にスクロールすると、私は下にスクロールしてイメージが離れて再びリフレッシュされると言います。画像を取得するための呼び出しを続けます。あなたの携帯電話のインターネットがダウンして再び立ち上がると、画像を自動ロードするのに役立つことを除いて、この動作は明らかに望ましくありません。しかし、現在の状態でさえ、それは電話を続けているとしてクラッシュしている。 AsyncTaskがそれをやめるのを止めるには?

答えて

2

イメージをファイルシステムまたはメモリにキャッシュするだけです。

リストをスクロールするたびにgetViewが呼び出されます。イメージローディング方法をgetViewに設定し、イメージキャッシュを使用しなかった場合は、イメージを何度も何度もダウンロードします。キャッシングをサポートするリストのためのいくつかのopensourceイメージローダーがあります。

droidFuのいずれかです。これは、2つのレベルのキャッシングをサポートします。ファイルシステムとメモリ。以下のリンクからdroidFuを入手してください。

https://github.com/kaeppler/droid-fu

+0

画像の多くは何がありますか?多くの記憶を食べるでしょう。 – Hick

0

イメージが正常に読み込まれたかどうかのチェックを維持するにはブール型フラグを試してください。

もしそうでなければ、Load Image Asynctaskだけを呼び出します。

アダプターに複数の行がある場合は、トラックを保持するためにブール値配列を使用する必要があります。

0

このコードを試してみてください。

class performBackgroundTask extends AsyncTask<String, String, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog.setMessage("Please wait ..."); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 

    @Override 
    protected String doInBackground(String... arg0) { 
     callxmlparser(); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 

     if (ringtoneNamelist != null && ringtoneNamelist.size() > 0) { 
      songslist.setAdapter(new Songslist()); 
     } else { 
      Toast.makeText(SongsList.this,"Network signal speed is too slow\ncannot parse the data from the server\n Please try again", Toast.LENGTH_LONG).show(); 
     } 
     dialog.dismiss(); 
    } 
} 
関連する問題