Android 如何通过整数获取图像

Android 如何通过整数获取图像,android,Android,我将图像id存储在sqlite中,但是当我检索id时,我得到了错误 android.content.res.Resources$NotFoundException:Resource ID#0x42 所以我猜 holder.myImg.setImageDrawable(c.getResources().getDrawable(99)) 它不工作,因为它等待的是资源而不是int 考虑到图像id存储在sqlite中,如何获取setImageDrawable的图像 在sqlite中保存图像的最佳做法是什

我将图像id存储在sqlite中,但是当我检索id时,我得到了错误
android.content.res.Resources$NotFoundException:Resource ID#0x42

所以我猜
holder.myImg.setImageDrawable(c.getResources().getDrawable(99))

它不工作,因为它等待的是资源而不是int


考虑到图像id存储在sqlite中,如何获取setImageDrawable的图像


在sqlite中保存图像的最佳做法是什么?

而不是在数据库中存储可绘制文件的整数id,而是存储其字符串id(名称)
避免使用整数id的原因是,不能保证每次构建项目时它总是相同的
每次进行更改和重新生成时,为视图、绘图表等指定的整数ID可能会更改。
因此,如果您存储可绘图的字符串id(名称),例如
ic\u menu\u camera
,当您从数据库检索它时,您可以通过以下方式获取其整数id:

int id = context.getResources().getIdentifier("ic_menu_camera", "drawable", context.getPackageName());
然后安全地使用该id。

context
是您必须提供的有效的
context

无法获取id,正如Mike M所说,我不应该将id存储在那里。现在最好的选择是将图像存储为blob

1)从补丁加载图像

 Bitmap myBitmap=  BitmapFactory.decodeFile(prm_FileOrig, null);
2)使用Bitmap.CompressFormat.JPEG减少空间(可选)

3)将位图保存在sqlite中的blob字段中

如果您已经在项目中实现了sqlite助手类,那么对我来说,这是最好的解决方案

如果你想保持你的“风格”,可以这样说:

int yourid =getResources().getIdentifier("yourpackagename:drawable/" + 99, null, null);
holder.myImg.setImageResource(yourid);

“考虑到图像id存储在sqlite中”-这两个都不是有效的资源id。您如何保存该值?您应该将图像uri存储到数据库中,并从数据库传递到ImageView获取uri。您应该使用setImageResource()而不是setImageDrawable()@MikeM。我获取的图像id如下所示:“image\u id=Integer.parseInt(uriPath.get(uriPath.size()-1).replaceAll(“\\D+”,”);”但是我为预览而获得的图像设置为`Bitmap thumb=MediaStore.Images.Thumbnails.getThumbnail(解析器,image\u id,MediaStore.Images.Thumbnails.MINI\u KIND,null);//在ImageView ImageView im=findViewById(R.id.imgCat)中设置图像;//im.setImageBitmap(拇指)`我还对最佳实践感兴趣如何在onActivityResult中使用它?