使用Cursor中的字符串获取可绘制到ImageView

时间:2012-04-16 03:14:25

标签: android resources decode identifier

我有一个数据库,其中包含用于动态创建页面的字符串名称和字符串文件名。在基于所选按钮的上一页上,光标返回所需的特定条目,然后用于查找和显示相应的图像。我一直试图从不同的地方混合代码,但似乎没有任何工作。它目前看起来像这样:

ImageView iv = (ImageView) findViewById(R.id.iv1);
Bitmap bmap = (Bitmap) BitmapFactory.decodeResource(this.getResources(),
getResources().getIdentifier(c.getString(4), "drawable", getPackageName()));
iv.setImageBitmap(bmap);

出于调试目的,我已经将光标getString(4)烘烤,它正确地显示为“al_0”或它应该是什么,并且res中的“drawable”文件夹中有一个名为“al_0.jpg”的文件”

我尝试了将packagename和drawable文件夹位置直接与图像名称连接在一起的各种组合,并将null放在其他变量位置。每次我遇到对decodeResource行的引用崩溃,或者“获取资源号0x00000000的值时没有包标识符。”

任何帮助都将受到赞赏,如果需要更多细节,我可以尝试提供它们。

更新:所以看起来其他东西是错的,甚至使用以下内容我都会崩溃:

ImageView iv = (ImageView) findViewById(R.id.iv1);
iv.setImageResource(R.drawable.al_0);

和R.drawable.al_0绝对是drawable-mdpi中的正确资源(我根据Lint的建议移动了它。)

2 个答案:

答案 0 :(得分:0)

这就是我的工作。

com.example.appname:drawable/filename格式存储文件名。注意appname和drawable之间的冒号。

然后在我从数据库中提取该字符串后,我使用它,其中imageString是光标的字符串。

imageResource = ClassName.this.getResources().getIdentifier(imageString, null, null);
imageView.setImageResource(imageResource);

答案 1 :(得分:0)

所以事实证明一切都很好,我的图像只是很大。使用BitmapFactory.Options.inSampleSize我能够让一切正常。感谢您提供有用的调试技巧,我为这次事故道歉。

更新:我还需要bmap.recycle(),因为这些视图是动态创建的,并且在打开一些视图后它们导致内存错误。两者都是解决问题的最佳方案。