Android图片没有从图片网址显示到ImageView

时间:2015-09-23 07:31:37

标签: java android url imageview

我想从" http://i.imgur.com /4GLKF4Q.jpg"向ImageView显示图片。但图像URL中的图像没有显示到imageview。我可以这样做吗?

的AsyncTask

class DownloadImageTask extends AsyncTask<String, Void, byte[]> {
    ImageView bmImage;

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

    protected byte[] doInBackground(String... urls) {
        try {
            URL url = new URL(urls[0]);
            InputStream is = (InputStream) url.getContent();
            byte[] buffer = new byte[8192];
            int bytesRead;
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            while ((bytesRead = is.read(buffer)) != -1) {
                output.write(buffer, 0, bytesRead);
            }
            return output.toByteArray();
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    protected void onPostExecute(byte[] result) {
        ByteArrayInputStream imageStream = new ByteArrayInputStream(result);
        Bitmap bm = BitmapFactory.decodeStream(imageStream);
        bmImage.setImageBitmap(bm);
    }
}

活动

new DownloadImageTask((ImageView) newView.findViewById(R.id.thumbnail))
            .execute("http://i.imgur.com/4GLKF4Q.jpg");

图片网址中的图片未显示给imageview。  在Logcat:

09-23 10:26:49.410 10591-10591/com.*** D/skia: --- SkImageDecoder::Factory returned null

3 个答案:

答案 0 :(得分:1)

从评论更新:将图片服务器更改为另一个解决问题。我想这是一个 i.imgur.com 问题。

你不应该使用自己的图像加载器任务,它会泄漏到某个地方。 存在两个好的库: - Fresco(来自Facebook) - Picasso(来自Square up)

还有UniversalImageLoader(UIL)。

答案 1 :(得分:1)

  1. 我建议您查看图片管理库(Facebook)Fresco与其他图片加载库相比非常棒且成熟。

    < / LI>
  2. Fresco使用3层架构(BITMAP_MEMORY_CACHEENCODED_MEMORY_CACHEDISK_CACHE)处理图像的所有缓存。它还减少了OOM(Out Of Memory)问题。当视图中的图像离开屏幕时,它会自动回收位图,从而释放内存。

答案 2 :(得分:0)

现在有一个official way从URL加载ImageView,而不是使用ImageView。

  

NetworkImageView - 在ImageLoader上构建,有效替换ImageView,以用于通过URL通过网络获取图像的情况。如果视图与层次结构分离,NetworkImageView还管理取消挂起的请求。

图像自动加载到后台线程中,并在UI线程上更新视图。它甚至支持缓存。