1

我对 Android 开发还很陌生,整天都在研究我的 ListAdapter 的问题,但找不到任何可以帮助我解决问题的答案。

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

我在清单中有权限:

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

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

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());

}

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

谢谢

普维特克

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

4

1 回答 1

0

有很多方法可以从 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 解码器错误,您可能必须包装流。在这里阅读更多。

但是,我建议您查看现有的库。Square即将推出的毕加索图书馆可能是您最好的选择。例子:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
于 2013-05-22T16:17:25.827 回答