2010-11-20 33 views
0

私のアンドロイドアプリケーション内で、URLから指定された画像でImageViewを更新したいと考えています。このURLは、AsyncTaskの一部としてAPI経由で取得されています。URLからの画像を使用してImageViewを更新する

<ImageView 
    android:adjustViewBounds="true" 
    android:scaleType="fitCenter" 
    android:layout_height="wrap_content" 
    android:id="@+id/product_image" 
    android:src="@drawable/no_product_image" 
    android:layout_marginRight="6dip" 
    android:layout_width="wrap_content" 
    /> 

そのようにデータがロードされている一方、ProgressDialogの背後に存在するブランクイメージがあり、次のよう

IはImageViewのが定義されています。 AsyncTaskのdoInBackgroundの一環として、製品の詳細をフェッチした後、私は

を呼び出す:

private void createProductScreen(Product product){ 
     Log.i(TAG, "Updating product screen"); 

     //Set the product image 
     ImageView imgView =(ImageView)findViewById(R.id.product_image); 
     Drawable drawable = loadImageFromWeb(product.getImageUrl()); 
     imgView.setImageDrawable(drawable); 
     Log.i(TAG, "Set image"); 
} 

次のように画像がウェブからロードされる:

private Drawable loadImageFromWeb(String url){ 
     Log.i(TAG, "Fetching image"); 
     try{ 
      InputStream is = (InputStream) new URL(url).getContent(); 
      Drawable d = Drawable.createFromStream(is, "src"); 
      Log.i(TAG, "Created image from stream"); 
      return d; 
     }catch (Exception e) { 
      //TODO handle error 
      Log.i(TAG, "Error fetching image"); 
      System.out.println("Exc="+e); 
      return null; 
     } 
    } 

これはIを実行すると「ストリームからのイメージの作成」をログに表示しますが、「イメージの設定」が表示されず、AsyncTaskのonPostExecuteは呼び出されません。

誰かが問題に関するアイデアを持っているか、ブランクイメージから製品イメージにイメージを更新するためのより良い方法はありますか?

+0

http://www.androidhive.info/2012/07/android-loading-image-from-url-http/この投稿に従います。私はいくつかのカスタムクラスと、イメージやイメージをロードするために実装できる関数を追加する必要があると思います。 – ishtiyaqm15

答えて

2

ImageViewを分離したスレッドで設定しようとしているので、例外が発生するはずです。 imgView.setImageDrawable(drawable);は、同じUIスレッドで呼び出される必要があります。 AsyncTaskクラスを使用しているため、imageviewオブジェクトを設定する適切な場所はonPostExecuteメソッドの内側です。 doInBackground意志onPostExecuteメソッドにDrawableのオブジェクトを返すような方法であなたのロジックを変更し 、そしてここ

Drawable drawable = loadImageFromWeb(product.getImageUrl()); 

が問題である、それは描画イメージにimgView.setImageDrawable(drawable);

0

セットImageViewのを呼び出して使用します。

Drawable drawable = loadImageFromWeb(XXXXUrl); 
Imageview.setImageDrawable(drawable); 

描画可能なURLを指定してください。

関連する問題