【问题标题】:BitmapFactory : unable to decode StreamBitmapFactory:无法解码流
【发布时间】:2013-05-22 15:50:48
【问题描述】:

我是 Android 开发的新手,整天都在研究我的 ListAdapter 的问题,但找不到任何可以帮助我解决问题的答案。

我有一个从 URL 解析的 JSON NewsString,需要将缩略图加载到 ListView 中。 我尝试通过 Imageloader (https://github.com/novoda/ImageLoader#directloader-utility) 加载它,然后将 Bitmap 转换为 Drawable,以便我可以在我的 ListView 中使用它(之前做过)。

我拥有 Manifest 中的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />

并且 JsonObject 在 AsyncTask 中被解析,我尝试从 Url 加载图像。

try {
    String url = e.getString("imageThumb");
    Bitmap bmp = new DirectLoader().download(url);
    Drawable d = new BitmapDrawable(null,bmp);
    Log.d("getBitmap", d.toString());
    row.put("thumb", d);
}catch (Exception e5) {
    Log.e("IMG", "Failed to load Thumbnail From URL: "+e5.toString());
    Drawable d = MainActivity.hweb_icon;
    row.put("thumb", d);
}

但我总是收到相同的错误消息:

我尝试了几个教程和其他东西,但对我来说从来没有成功。 URL 正确,不需要任何编码。

我之前的做法是这样的:

try {

    String url = e.getString("imageThumb");
    InputStream in = new java.net.URL(url).openStream();
    Bitmap bmp = BitmapFactory.decodeStream(in);                                                                                
    Drawable d = new BitmapDrawable(null,bmp);
    row.put("thumb", d);
}catch (Exception e5) {
    // handle it
    Log.e("IMG", "Failed to load Thumbnail From URL : "+e5.toString());

}

对不起,如果这个问题已经回答了,但我找到了很多解决方案并尝试了它们,但没有一个能帮助我。

谢谢

pwittke

编辑: 我创建了一个新的Testproject,下面的代码运行良好,所以我开始以某种方式停用每个使用drawables的部分,结果证明SimpleAdapter无法以这种方式加载图像......它只能从资源中加载图像,而不是从url...谢谢您的脚本britzl,它工作正常,现在我需要找到一种方法来更改我的图像适配器...

【问题讨论】:

    标签: android listview android-asynctask bitmapfactory


    【解决方案1】:

    有多种方法可以从 URL 加载位图。如果您想自己动手,可以尝试以下方法:

    public Bitmap loadImage(String url) {
        DefaultHttpClient client = new DefaultHttpClient();
        Bitmap bitmap = null;
        try {
            HttpResponse response = client.execute(new HttpGet(url));
            HttpEntity entity = response.getEntity();
            if(entity != null) {
                InputStream in = entity.getContent();
                bitmap = BitmapFactory.decodeStream(in);
            }
        }
        catch (Exception e) {
        }
        return bitmap;
    }
    

    有一些事情需要考虑,例如,如果您遇到 Skia 解码器错误,您可能需要包装流。 Read more here.

    不过,我建议您查看现有库。 Square 即将推出的 Picasso 库可能是您最好的选择。示例:

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

    【讨论】:

    • 感谢您的回答,我会在我回到办公室时尝试一下! :)
    • 我试过你的功能,但我最终得到了同样的错误信息:BitmapFactory |无法解码流:java.io.FileNotFoundException:/android.graphics.drawable.BitmapDrawable@414d5140:打开失败 ENOENT(没有这样的文件或目录) System.out | resolveUri 在坏 uri 上失败:android:graphics.drawable.BitmapDrawable@414d5140
    • 它的所有 .jpg 图像来自我们自己的服务器,并且 url 是干净的:/ 据我了解,在我将其转换为可绘制对象之前,位图似乎丢失了?
    • 您可以使用完全相同的 URL 从浏览器下载图像吗?您是否尝试过从其他来源下载图像?从网上随机选择一张图片并尝试下载它,例如:i0.kym-cdn.com/photos/images/original/000/000/578/…
    • @pwittke,你对简单适配器做了什么修改,因为我有同样的问题,无法解码图像......
    猜你喜欢
    • 2017-07-23
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多