0

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

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”的文件。

我尝试了将包名和可绘制文件夹位置直接与图像名称连接起来的各种组合,并将 null 放在其他变量位置。每次我引用 decodeResource 行或“获取资源编号 0x00000000 的值时无包标识符”时都会崩溃。

任何帮助将不胜感激,如果需要更多细节,我可以尝试提供。

更新:所以似乎还有其他问题,即使使用以下内容我也会崩溃:

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

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

4

2 回答 2

0

所以事实证明一切都很好,我的图像太大了。使用BitmapFactory.Options.inSampleSize我能够让一切正常。感谢您提供有用的调试提示,对于此次事故,我深表歉意。

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

于 2012-04-16T18:38:01.877 回答
0

这就是我所做的。

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

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

imageResource = ClassName.this.getResources().getIdentifier(imageString, null, null);
imageView.setImageResource(imageResource);
于 2012-04-16T03:28:57.030 回答