我必须从网址下载图片,然后在用户界面的图片视图中显示下载的图片。 为此,我使用下面提到的代码:
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上设置图像。当我调试我的应用程序,然后图像设置正确。 我相信我需要在下载图像之前进行阻止调用,然后调用image.setImageDrawable。
这里出现的问题是什么?我无法弄清楚为什么我无法加载任何图像,为什么只有当我调试时,我才能看到图像?
提前谢谢。
答案 0 :(得分:0)
你应该试试this例子。它运行时从URL中提取图像,并在listview中显示它。我想这会对你有帮助。
答案 1 :(得分:0)
非UI线程无法更新UI组件。使用handler更新UI组件。