Java 如何在ListView中设置此位图?
我的本地数据库中有图像,我想在listview中填充这些图像 这就是我正在做的:Java 如何在ListView中设置此位图?,java,android,listview,bitmap,android-drawable,Java,Android,Listview,Bitmap,Android Drawable,我的本地数据库中有图像,我想在listview中填充这些图像 这就是我正在做的: ... bitmap[i] = MySQLiteHelper.getImage(images[i]); // This fetches the bitmap image from database ... 在这里,我将我的位图转换为可绘制的 d[i] = new BitmapDrawable(getResources(),bitmap[i]); 然后我在HashMap的put方法中使用这个
...
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.
但图像不会显示在列表视图中。我可以显示所有文本,但不能显示图像
我的日志中出现以下错误:
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
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};
我做错了什么?我认为,当将位图转换为可绘制位图时,可绘制位图持有一个临时值,而put()无法访问该值?这里怎么了,伙计们,有什么需要帮忙的吗
编辑:
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
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};
我的HashMap代码:
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
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};
我的日志猫:使用Base64
将位图
转换为字符串
(注意:考虑使用新而不是<代码> ListVIEW < /代码>以获得更好的性能)
您要做的是将字符串
转换为可位图
(在MySQLiteHelper.getImage()的情况下,
返回一个字符串
作为指向图像的路径,因为通常不会将二进制数据存储在数据库中)或将可位图
转换为字符串
。这两种情况实际上都没有意义
通常的做法是:实现一个helper类,然后用它的实例参数化ListView的适配器。从错误消息中可以看出,web、look或使用数据库的示例数不胜数。问题似乎出在代码的其他地方
BitmapFactory﹕ Unable to decode stream: java.io.FileNotFoundException
这可能意味着您正在解码带有位置的文件,而该位置无效。可能您正在使用BitmapFactory.decode文件
如果您正在使用BitmapFactory,请检查您的代码,并确保您通过了正确的位置(如果可用)。这不会解决您的问题,但为什么使用
String
的HashMap
包含BitmapDrawable
为什么不HashMap
,但为了解决您的错误,我将确保从数据库中获得一些东西,并且创建位图可绘制文件时不会出现异常(调试器是您的朋友;)。哈哈!谢谢@LaurentMeyer。啊!!为什么选择HashMap,因为我还有其他字符串要传递给HashMap。是的,@ZakiMak我认为这就是问题所在——我的getImage()方法中的代码。getImage()返回位图。Pl引用我的getImage()方法。@nikhil,这是我提到的第二个例子String.valueOf(d[I])
。同样,您不能像那样将二进制数据转换为String
。如果您确实觉得需要这样做,请使用类似于Base64
的方法。见谢谢@Droidman。我使用Base64将位图转换为字符串,现在不再出现该错误。当然,我仍然无法显示图像,但我觉得这与其他方面有关。应用程序速度太慢,logcat显示它处理的输出太多。上次我的应用程序不得不显示图像时速度变慢了。你能解释一下吗?请看我的日志。谢谢你的时间。@nikhil当然会很慢的。。您现在要做的是:从数据库中获取二进制文件,将其转换为位图
,然后转换为位图可绘制
,然后将其编码为Base64字符串
,最后再次解码并显示。这是一个巨大的CPU/RAM/电池影响。正确的方法是:将实际图像保存到设备存储器,将其路径写入数据库,然后使用此路径在适配器的getView
方法中加载图像。看看毕加索
库,它可以为您处理图像加载