【问题标题】:Loading Bitmap to ImageView from URL in android从android中的URL加载位图到ImageView
【发布时间】:2015-07-22 11:14:56
【问题描述】:

我正在使用以下方法从 url 中检索位图并将其传递给 imageview ,但 imageview 没有被更新。

 public static Bitmap LoadImageFromWebOperations(String url) {
    Bitmap bitmap;
    try {
        InputStream is = new URL(url).openStream();
       bitmap = BitmapFactory.decodeStream(is);
        return bitmap;
    } catch (Exception e) {
         return null;
    }

打电话——

  mov1_poster.setImageBitmap(VPmovies.LoadImageFromWebOperations(mov_details[0][7]));
//doesn't work

  Toast.makeText(this,"url is \n"+mov_details[0][7],Toast.LENGTH_LONG).show();
   // shows the url of the image successfully (just to check the url is not null)

我做错了什么吗?请帮忙。

【问题讨论】:

标签: android url bitmap bitmapfactory


【解决方案1】:
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    private ImageView imageView;
    private Bitmap image;

    public DownloadImageTask(ImageView imageView) {
        this.imageView = imageView;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            image = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            image = null;
        }
        return image;
    }

    @SuppressLint("NewApi")
    protected void onPostExecute(Bitmap result) {
        if (result != null) {
            imageView.setImageBitmap(result);
        }
    }
}

现在调用您的代码:

 new DownloadImageTask(YOUR_IMAGE_VIEW).execute("YOUR_URL");

【讨论】:

  • 谢谢,很有帮助。一旦我检查了日志,发现 NetworkOnMainThreadException 是原因,当应用程序尝试在其主线程上执行网络操作时会引发此异常。为此,您的答案是正确的,在单独的(后台)线程中运行操作。
【解决方案2】:

在处理图像时使用the picasso library,它可以创造奇迹,而且很简单!

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多