0

我希望有人可以帮助我解决我一直遇到的问题。我正在使我的应用程序在高于 3.0 的版本上运行,因此我只能在 UI 线程上执行 GUI 任务。我有以下代码,我没有得到任何编译错误,但它不起作用。在日志中,我收到以下错误:

I/AndroidRuntime(464):注意:附加线程 'Binder Thread #3' 失败

谢谢您的帮助!

new DownloadImageTask().execute(imgURL); //imgURL is declared as string URL

    private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {

     protected void onPostExecute(Bitmap result) {
        ((ImageView) findViewById(R.id.imgCity)).setImageBitmap(bmp);
     }

    protected Bitmap doInBackground(String... params) {
        return loadImage(params[0]);
    }

}


public Bitmap loadImage(String poiURLimg) {

    try {
        URL ulrn = new URL(poiURLimg);
        HttpURLConnection con = (HttpURLConnection) ulrn.openConnection();
        InputStream is = con.getInputStream();
        bmp = BitmapFactory.decodeStream(is);
        if (null != bmp)
        return bmp;
    } catch (Exception e) {
    }
    return bmp;
}
4

2 回答 2

1

Binder Thread #3 错误与您的应用程序中的代码无关。有许多潜在的原因通常与日食中的某些事情有关。您可以阅读这篇文章,其中提供了一些示例。

至于为什么无法加载位图 - 在您onPostExecute的设置中,您正在将位图设置为ImageViewbmp。Bmp 是创建位图的 loadImage 方法返回的值的名称。它不是您作为参数传递到的位图的名称onPosExecute- 那是位图结果。将 bmp 更改为结果,它应该可以工作。

于 2013-04-11T14:46:35.987 回答
0

有几件事要尝试。首先,确保您已将 INTERNET 权限添加到您的 AndroidManifest.xml 文件中。你需要它来从互联网上下载图像,如果没有它,你的应用程序将会崩溃(尽管听起来这不是你的问题)

尝试将此用于您的 loadImage() 方法:

public static Bitmap loadImage(String src)
    {
        try
        {
            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
    }

这是我目前在我的应用程序中编写和使用的一个 DownloadImageTask 示例(所以我知道它可以正常工作):

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>
{
    @Override
    protected Bitmap doInBackground(String... params)
    {
        return loadImage(params[0]);
    }

    @Override
    protected void onPostExecute(Bitmap result)
    {
        if (isCancelled() || result == null)
            return;

        ((ImageView) findViewById(R.id.image_view)).setImageBitmap(result);
    }
}
于 2013-04-11T14:44:54.577 回答