Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在ListView中设置此位图?_Java_Android_Listview_Bitmap_Android Drawable - Fatal编程技术网

Java 如何在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方法中使用这个

我的本地数据库中有图像,我想在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.
但图像不会显示在列表视图中。我可以显示所有文本,但不能显示图像

我的日志中出现以下错误:

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
方法中加载图像。看看
毕加索
库,它可以为您处理图像加载