【问题标题】:Resource IDs - save to save them in a database资源 ID - 保存以将它们保存在数据库中
【发布时间】:2015-12-09 07:37:48
【问题描述】:

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

将资源ID保存在我的数据库中是否保存?我不确定清理项目或新构建是否会确保 id 不会改变...

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

【问题讨论】:

标签: android resources android-resources


【解决方案1】:

使用资源 ID 并不安全。每当您添加或删除资源时,所有其他 ID 都可能更改。

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

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

希望对你有帮助。

【讨论】:

  • 我将来会使用像 dropbox、box、drive 等服务,我想在我的应用程序中显示所有可用的媒体元数据,当然是本地化的......这就是为什么我必须结合本地/online sources...反正我认为是这样的,我认为最好是在资源中做一个大评论,声明那些资源不允许重命名并小心...
【解决方案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 函数而不是直接访问地图,这将检查元素是否存在。如果您要返回 int,那么您需要设置一些资源,并且如果您不必到处检查该资源是否存在,则通常需要设置一些更容易的代码,但它仍然可以工作 - 例如使用“missing_resource.jpg”如果它丢失,则作为资源返回。这样它很容易看到。当然你仍然可以做一些检查和隐藏的东西,但正如所说,你必须每次都这样做,这并不总是可行的。

希望对你有帮助

【讨论】:

  • 这与每次打开应用程序时覆盖资源 id 表的逻辑相同。它只是应该有更好的性能,因为 Map 已经跳转到对象的地址。
  • stackoverflow.com/a/19093475/2886507 也许这是一个更清晰的解决方案,因为未找到资源返回“-1”
  • 如果您无法控制资源名称,这可能需要考虑,实际上我认为维护此地图与正确维护资源名称相比没有太大区别...
  • @prom85 我不会这样称呼它。这是相同的目标,但我在这里介绍的是可重构性,这是其他版本所没有的。根据他在上面的解释,这似乎是一个重要的选择
猜你喜欢
  • 2012-03-04
  • 2014-03-30
  • 2015-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多