我应该如何在 ListView 中设置此位图?
How should I set this Bitmap in ListView?
我的本地数据库中有图像,我想将其填充到列表视图中。
这就是我正在做的事情:
...
bitmap[i] = MySQLiteHelper.getImage(images[i]);
// This fetches the bitmap image from database
...
在这里,我正在将我的位图转换为可绘制对象。
d[i] = new BitmapDrawable(getResources(),bitmap[i]);
然后我在 HashMap 的 put 方法中使用这个 Drawable 将其设置为 listView 项。
hm.put("img", String.valueOf(d[i]));
// put() accepts java.lang.String as input.
但是列表视图中没有显示图像。我可以显示所有文本,但不能显示图像。
我的 LogCat 中出现以下错误:
BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: android.graphics.drawable.BitmapDrawable@3ab28e36: open failed: ENOENT (No such file or directory)
resolveUri failed on bad bitmap uri: android.graphics.drawable.BitmapDrawable@3ab28e36
我做错了什么?我认为当将该 Bitmap 转换为 Drawable 时,drawable 持有一个临时值而 put() 无法访问它?伙计们,这里有什么问题吗?
编辑:
我的HashMap代码:
List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
for(int i=0;i<len;i++){
HashMap<String, String> hm = new HashMap<String,String>();
hm.put("img", String.valueOf(d[i]));
hm.put("tit", " Title : " + title[i]);
hm.put("init", " Initial Price : " + init_price[i]);
hm.put("cur"," Current Price : " + cur_price[i]);
aList.add(hm);
}
// Keys used in Hashmap
String[] from = { "img","tit","init","cur" };
// Ids of views in listview_layout
int[] to = { R.id.img,R.id.tit,R.id.init,R.id.cur};
getImage() 方法:
图像(位图)作为 BLOB 存储在数据库中。我以 ByteArray 的形式获得了它。
现在,我使用以下方法将其转换回位图。
// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
My Logcat : 在使用 Base64
将 Bitmap
转换为 String
之后
(注意:考虑使用新的 RecyclerView 而不是 ListView
以获得更好的性能)
您要做的是将 String
转换为 BitmapDrawable
(以防 MySQLiteHelper.getImage()
returns a String
作为路径指向到图像,因为通常您不会将二进制数据存储在数据库中)或将 BitmapDrawable
转换为 String
。这两种情况实际上都没有意义。
通常的做法是:实现一个助手 class 然后用它的实例参数化 ListView 的适配器。网上有大量示例,请查看使用数据库
的 this one, or that one
从错误消息来看,问题似乎出在代码的其他地方。
BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException
这可能意味着您正在解码带有位置的文件,但该位置无效。也许您正在使用 BitmapFactory.decodeFile?
如果您使用的是 BitmapFactory,请检查您的代码,并确保您传递的位置正确(如果可用)。
我的本地数据库中有图像,我想将其填充到列表视图中。
这就是我正在做的事情:
...
bitmap[i] = MySQLiteHelper.getImage(images[i]);
// This fetches the bitmap image from database
...
在这里,我正在将我的位图转换为可绘制对象。
d[i] = new BitmapDrawable(getResources(),bitmap[i]);
然后我在 HashMap 的 put 方法中使用这个 Drawable 将其设置为 listView 项。
hm.put("img", String.valueOf(d[i]));
// put() accepts java.lang.String as input.
但是列表视图中没有显示图像。我可以显示所有文本,但不能显示图像。
我的 LogCat 中出现以下错误:
BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException: android.graphics.drawable.BitmapDrawable@3ab28e36: open failed: ENOENT (No such file or directory)
resolveUri failed on bad bitmap uri: android.graphics.drawable.BitmapDrawable@3ab28e36
我做错了什么?我认为当将该 Bitmap 转换为 Drawable 时,drawable 持有一个临时值而 put() 无法访问它?伙计们,这里有什么问题吗?
编辑:
我的HashMap代码:
List<HashMap<String,String>> aList = new ArrayList<HashMap<String,String>>();
for(int i=0;i<len;i++){
HashMap<String, String> hm = new HashMap<String,String>();
hm.put("img", String.valueOf(d[i]));
hm.put("tit", " Title : " + title[i]);
hm.put("init", " Initial Price : " + init_price[i]);
hm.put("cur"," Current Price : " + cur_price[i]);
aList.add(hm);
}
// Keys used in Hashmap
String[] from = { "img","tit","init","cur" };
// Ids of views in listview_layout
int[] to = { R.id.img,R.id.tit,R.id.init,R.id.cur};
getImage() 方法:
图像(位图)作为 BLOB 存储在数据库中。我以 ByteArray 的形式获得了它。 现在,我使用以下方法将其转换回位图。
// convert from byte array to bitmap
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
My Logcat : 在使用 Base64
将 Bitmap
转换为 String
(注意:考虑使用新的 RecyclerView 而不是 ListView
以获得更好的性能)
您要做的是将 String
转换为 BitmapDrawable
(以防 MySQLiteHelper.getImage()
returns a String
作为路径指向到图像,因为通常您不会将二进制数据存储在数据库中)或将 BitmapDrawable
转换为 String
。这两种情况实际上都没有意义。
通常的做法是:实现一个助手 class 然后用它的实例参数化 ListView 的适配器。网上有大量示例,请查看使用数据库
的 this one, or that one从错误消息来看,问题似乎出在代码的其他地方。
BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException
这可能意味着您正在解码带有位置的文件,但该位置无效。也许您正在使用 BitmapFactory.decodeFile?
如果您使用的是 BitmapFactory,请检查您的代码,并确保您传递的位置正确(如果可用)。