资源ID - 保存以将其保存在数据库中

时间:2015-12-09 07:37:49

标签: android resources android-resources

我不确定这是否完全保存。我从不同的在线资源中读取了一些数据,并将这些数据保存在本地数据库中。我还需要从我的应用资源中保存资源ID,以显示正确本地化的在线源数据。

保存资源ID是否保存在我的数据库中?我不确定清理项目或新版本是否会确保ID不会发生变化......

有替代解决方案吗?保存资源名称是另一种选择,只要我不改变资源的名称......可能这是更好的方法吗?

2 个答案:

答案 0 :(得分:2)

使用资源ID并不安全。无论何时添加或删除资源,所有其他ID都可能会更改。

正如您所提到的,命名约定是一种更好的方法。您可以获取给定名称的资源的ID,但您不应期望获得太多性能。

另一方面,我会尝试用另一种方式。例如;我有一个资源和一个与之配对的在线数据。其中一个数据在线源,另一个在本地持有。为什么不将它们存储在在线资源中?

希望它对你有所帮助。

答案 1 :(得分:2)

我有另一种解决方案,而不是使用命名(字符串)或整数映射。我知道,我的解决方案基本上是更多的代码及其工作,但我不同的主要原因是重构和更改。您希望编辑器告诉您资源是否缺失,以便您做出反应。如果你没有绑定文件名更改等,它也会有很大的帮助。

据我了解,您需要从其他来源访问本地图像,这些图像不知道这些图像。如果这是正确的,那么最好使用某种自制的图像ID。假设你有资源aa.jpg和bb.png。这将转化为这样的事情:

Map<String, Integer> map
map.put("drawable_aa",R.drawable.aa);
map.put("drawable_bb",R.drawable.bb);

这允许您现在查找哪个资源可能匹配。您不应该将它存储在数据库中,而是在启动时在应用程序的某处构建此查找表(应用程序,单例,您注入的内容,但是您这样做)。 这将允许您现在进行诸如重构之类的更改,其中aa.jpg的名称可以更改为cc.jpg,并且将匹配:

map.put("drawable_aa", R.drawable.cc);

因此甚至没有破坏任何东西。它还允许您在任何您想要的地方进行自由映射,并在此处进行更改。 如果缺少某些东西,它也会在抱怨时抱怨。

有一点需要注意 - 制作一些getter函数而不是直接访问map,这将检查元素是否存在。如果你返回int,那么你需要有一些资源集,如果你不必在任何地方检查该资源是否存在,那么它通常是更简单的代码,但它仍然可以工作 - 例如通过使用&#34; missing_resource .JPG&#34;作为资源返回的,如果它丢失了。这样很容易看到。当然,你仍然可以做一些检查和隐藏的东西,但正如所说的那样,你必须每次都这样做,这并不总是可行的。

希望有所帮助