资源 ID - 保存以将它们保存在数据库中
Resource IDs - save to save them in a database
我不确定这是否完全保存。我从不同的在线来源读取了一些数据并将这些数据保存在本地数据库中。我还需要从我的应用程序资源中保存一个资源 ID,以正确显示来自在线资源的本地化数据。
是不是把资源id保存到我的数据库里了?我不确定清理项目或新构建是否会确保 ID 不会改变...
有替代方案吗?保存资源名称是一种替代方法,只要我不更改资源名称...可能这是更好的方法?
使用资源 ID 是不安全的。每当您添加或删除资源时,所有其他 ID 都可能发生变化。
如您所述,命名约定是更好的方法。您可以获得给定名称的资源 ID,但您不应期望太多性能。
另一方面,我会尝试使用另一种方式。例如;我有一个资源和一个与之配对的在线数据。其中一个数据位于在线资源中,其他数据位于本地。为什么不将它们都存储在在线资源中?
希望对您有所帮助。
我有另一种解决方案,而不是使用命名(字符串)或整数映射。我知道,我的解决方案基本上是稍微多一点代码及其工作,但我会以不同方式做的主要原因是重构和更改。如果缺少资源,您希望编辑器告诉您,以便您做出反应。如果您不受文件名更改等约束,它也有很大帮助
据我了解,您需要从不知道这些图像的其他来源访问本地图像。如果这是正确的,那么最好使用某种自制的图像 ID。假设您有资源 aa.jpg 和 bb.png。那将转化为这样的东西:
Map<String, Integer> map
map.put("drawable_aa",R.drawable.aa);
map.put("drawable_bb",R.drawable.bb);
这让您现在可以查找可能匹配的资源。您不应该将其存储在数据库中,而是在启动时在您的应用程序中的某处构建此查找 table(应用程序、单例、您注入的东西,无论您如何执行)。
这将允许您现在进行重构等更改,其中 aa.jpg 的名称可以更改为 cc.jpg,并且匹配到:
map.put("drawable_aa", R.drawable.cc);
因此甚至没有破坏任何东西。它还允许您对任何您想要的东西进行免费映射,只需在此处进行更改。
它也会一边抱怨一边抱怨,少了点什么。
需要注意一件事 - 创建一些 getter 函数而不是直接访问地图,这将检查元素是否存在。如果您要返回 int,那么您需要设置一些资源,如果您不必到处检查该资源是否存在,那么您通常需要更简单的代码,但它仍然可以工作——例如使用 "missing_resource.jpg"如果丢失,则作为资源返回。这样很容易看到。当然你仍然可以做一些检查和隐藏的东西,但正如所说,你必须每次都这样做,但这并不总是可行的。
希望对您有所帮助
我不确定这是否完全保存。我从不同的在线来源读取了一些数据并将这些数据保存在本地数据库中。我还需要从我的应用程序资源中保存一个资源 ID,以正确显示来自在线资源的本地化数据。
是不是把资源id保存到我的数据库里了?我不确定清理项目或新构建是否会确保 ID 不会改变...
有替代方案吗?保存资源名称是一种替代方法,只要我不更改资源名称...可能这是更好的方法?
使用资源 ID 是不安全的。每当您添加或删除资源时,所有其他 ID 都可能发生变化。
如您所述,命名约定是更好的方法。您可以获得给定名称的资源 ID,但您不应期望太多性能。
另一方面,我会尝试使用另一种方式。例如;我有一个资源和一个与之配对的在线数据。其中一个数据位于在线资源中,其他数据位于本地。为什么不将它们都存储在在线资源中?
希望对您有所帮助。
我有另一种解决方案,而不是使用命名(字符串)或整数映射。我知道,我的解决方案基本上是稍微多一点代码及其工作,但我会以不同方式做的主要原因是重构和更改。如果缺少资源,您希望编辑器告诉您,以便您做出反应。如果您不受文件名更改等约束,它也有很大帮助
据我了解,您需要从不知道这些图像的其他来源访问本地图像。如果这是正确的,那么最好使用某种自制的图像 ID。假设您有资源 aa.jpg 和 bb.png。那将转化为这样的东西:
Map<String, Integer> map
map.put("drawable_aa",R.drawable.aa);
map.put("drawable_bb",R.drawable.bb);
这让您现在可以查找可能匹配的资源。您不应该将其存储在数据库中,而是在启动时在您的应用程序中的某处构建此查找 table(应用程序、单例、您注入的东西,无论您如何执行)。 这将允许您现在进行重构等更改,其中 aa.jpg 的名称可以更改为 cc.jpg,并且匹配到:
map.put("drawable_aa", R.drawable.cc);
因此甚至没有破坏任何东西。它还允许您对任何您想要的东西进行免费映射,只需在此处进行更改。 它也会一边抱怨一边抱怨,少了点什么。
需要注意一件事 - 创建一些 getter 函数而不是直接访问地图,这将检查元素是否存在。如果您要返回 int,那么您需要设置一些资源,如果您不必到处检查该资源是否存在,那么您通常需要更简单的代码,但它仍然可以工作——例如使用 "missing_resource.jpg"如果丢失,则作为资源返回。这样很容易看到。当然你仍然可以做一些检查和隐藏的东西,但正如所说,你必须每次都这样做,但这并不总是可行的。
希望对您有所帮助