因此。我目前正在开发一个应用程序,允许用户从我在res / drawable /文件夹中保存的一组图像中选择四个不同的图像,然后将这些选项保存为数据库中的条目。但是,我需要当用户要求时,能够重新显示这四个图像,我不确定存储图像的最佳方式是什么,因为我目前的设置将来不适合我。
现在,我让它工作,以便我实际上将R.java int标识符插入到每个图像的数据库中,因此数据库有四列:img1(int),img2(int),img3(int ),img4(int)。然后,当我编写查询时,我只使用这些值代替R.drawable.someImage。
工作正常。除了......当我将新图像添加到res / drawable文件夹时,所有可绘制的ID都会被更改!那么我在数据库中的ID是错误的,有些会拉错图像,有些会抛出NullPointerExceptions!
这是一个问题,因为我希望能够在用户下载后使用新图像更新应用。我应该如何存储这些图像以便动态选择它们,然后再次可靠地引用它们?
答案 0 :(得分:1)
这是一个问题,因为我希望能够在用户下载后使用新图像更新应用。
我不太明白这一点 - 如果你要在'用户下载你的应用程序之后'分发新图像,那么新图像永远不会有资源ID(如R.java中所见),因为它们是自动的 - 作为构建过程的一部分生成。
您是真的是这个意思,还是打算用新图片更新应用并让用户再次下载?
如果您要定期使用新图像更新应用并让用户下载更新的应用,您可以在运行时使用...找到资源ID
int resId = getResources.getIdentifier("img1", "drawable", "com.mycompany.mypackagename");
此时,当然,您需要知道所有drawable的名称,尽管这可以通过res / values / strings.xml中的字符串数组来实现。
但是,如果您想在不需要用户更新应用程序的情况下添加新图像,我会考虑维护图像目录(例如,在SD卡上)。这样,您只需将路径存储到数据库中的图像文件即可。
答案 1 :(得分:0)
资源可以作为原始数据访问:使用AssetManager.open(..)然后您可以使用BitmapFactory.decodeStream(..)从数据流创建位图。
因此,您只需保存图像的文件名,并通过上述命令实例化Bitmaps。