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を呼び出すまでブロッキング呼び出しを行う必要があると思います。
ここで発生する問題は何ですか?なぜ画像を読み込めないのか、どうして私がデバッグした時だけ画像が表示されるのか分かりません。
ありがとうございます。
onPostExecuteは、UIスレッドで実行されます。私はUIスレッドから何もしていません。 – user590849