通过多线程在Android中无法运行的图像下载

时间:2011-07-04 07:31:55

标签: android multithreading

我必须从网址下载图片,然后在用户界面的图片视图中显示下载的图片。 为此,我使用下面提到的代码:

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。

这里出现的问题是什么?我无法弄清楚为什么我无法加载任何图像,为什么只有当我调试时,我才能看到图像?

提前谢谢。

2 个答案:

答案 0 :(得分:0)

你应该试试this例子。它运行时从URL中提取图像,并在listview中显示它。我想这会对你有帮助。

答案 1 :(得分:0)

非UI线程无法更新UI组件。使用handler更新UI组件。