2011-07-04 19 views
0

URLから画像をダウンロードし、ダウンロードした画像をUIの画像ビューに表示する必要があります。マルチスレッドによる画像ダウンロードがAndroidで動作しない

public class ShowUIData extends AsyncTask<Void, Void, Void> { 
    String productvalues[]; 
    Drawable productimagebitmap; 

    @Override 
    protected Void doInBackground(Void... params) { 
     productvalues = hb.getProductDetailsWithJson(id + 1); 
     if (productvalues != null) { 
      productimagebitmap = getImage(productvalues[3]); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
     if (productvalues != null) { 
      // Set the values obtained from the database. 
      // Check if image returned from URL is not null. 
      if (productimagebitmap != null) { 
       ImageView productimage = (ImageView) findViewById(R.id.productimage); 
       productimage.setImageDrawable(productimagebitmap); 
      } 
     } 
     dismissDialog(); 
    } 

    // Download image from URL obtained for database. 
    private Drawable getImage(String address) { 
     try { 
      Log.i("product details", "starting image download"); 
      URL url = new URL(address); 
      URLConnection conn = url.openConnection(); 
      conn.connect(); 
      InputStream is = conn.getInputStream(); 
      Drawable d = Drawable.createFromStream(is, "src name"); 
      is.close(); 
      return d; 
     } catch (Exception e) { 
      Log.i("the url", address); 
      e.printStackTrace(); 
      return getApplicationContext().getResources().getDrawable(
        R.drawable.noimage); 
     } 
    } 

有効なURLがのgetImage関数に渡されると、例外がスローされていないが、静止画像がImageViewの上に設定されていない。このため iは、下記のコードを使用しています。アプリケーションをデバッグすると、イメージが正しく設定されます。 イメージがダウンロードされてからimage.setImageDrawableを呼び出すまでブロッキング呼び出しを行う必要があると思います。

ここで発生する問題は何ですか?なぜ画像を読み込めないのか、どうして私がデバッグした時だけ画像が表示されるのか分かりません。

ありがとうございます。

答えて

0

this例を試してください。ランタイムはURLからイメージを取り出し、それをlistviewにも表示します。私はこれがあなたを助けると思う。

0

UI以外のスレッドはUIコンポーネントを更新できません。 UIコンポーネントを更新するにはハンドラを使用します。

+0

onPostExecuteは、UIスレッドで実行されます。私はUIスレッドから何もしていません。 – user590849

関連する問題