将键从服务器映射到资源
Map keys from the server to resources
考虑这样一个事实,即您有一个 API 从中获取数据,并且 API 本身 returns 接收客户端应该使用的某些键 "resolve" 要呈现给用户的人类可读字符串。
例如,键可能看起来像这样:
DOMAIN_TYPE_SUBTYPE_ID
然后将对应于 strings.xml
中的给定条目:
<string name="domain_type_subtype_id">This magical item</string>
不幸的是,人类可读的值本身不是从 API 传递的(也不需要翻译),但我正在尝试找出关于如何映射的最佳方法以最有效的方式获取值 (R.string.abc
) 的键。
在我的脑海中,我看到了两种前进的方式(因为我无法更改 API):
1) 根据名称进行运行时资源查找,并向所有代码大神祈祷事情不会改变。基本上:
Resources.getSystem().getIdentifier(keyFromTheApi.toLowerCase(), "id", getPackageName())
但是,根据我所听到和阅读的内容...这确实不是一种高效的方法。我认为在多个字符串的 RecyclerView
设置中使用它是一个非常糟糕的主意。
2) 在单例 class 的某处有一个包含所有数据(字符串、整数)的静态查找字段,但考虑到 很多 要跟踪的键,这可能是不幸的内存命中?
Map<String, Integer> strings = new HashMap<String, Integer>() {{
put("DOMAIN_TYPE_SUBTYPE_ID", R.string.domain_type_subtype_id);
//...
}};
关于如何以好的方式解决问题有什么建议吗?
感觉真的很脆弱,我会避免它
我会做类似的事情,但用 switch 语句代替:
public static int lookupStringRes(String value) {
switch (value) {
case "DOMAIN_TYPE_SUBTYPE_ID": return R.string.domain_type_subtype_id;
// ...
default:
Log.w("TAG", "Resource not found");
return -1;
}
}
并不是说这是最好的解决方案,但在我的脑海中,这是我要开始的解决方案。 Map vs Switch 归结为内存 vs 性能,您将以内存为代价在 Map 中进行更快的查找。
考虑这样一个事实,即您有一个 API 从中获取数据,并且 API 本身 returns 接收客户端应该使用的某些键 "resolve" 要呈现给用户的人类可读字符串。
例如,键可能看起来像这样:
DOMAIN_TYPE_SUBTYPE_ID
然后将对应于 strings.xml
中的给定条目:
<string name="domain_type_subtype_id">This magical item</string>
不幸的是,人类可读的值本身不是从 API 传递的(也不需要翻译),但我正在尝试找出关于如何映射的最佳方法以最有效的方式获取值 (R.string.abc
) 的键。
在我的脑海中,我看到了两种前进的方式(因为我无法更改 API):
1) 根据名称进行运行时资源查找,并向所有代码大神祈祷事情不会改变。基本上:
Resources.getSystem().getIdentifier(keyFromTheApi.toLowerCase(), "id", getPackageName())
但是,根据我所听到和阅读的内容...这确实不是一种高效的方法。我认为在多个字符串的 RecyclerView
设置中使用它是一个非常糟糕的主意。
2) 在单例 class 的某处有一个包含所有数据(字符串、整数)的静态查找字段,但考虑到 很多 要跟踪的键,这可能是不幸的内存命中?
Map<String, Integer> strings = new HashMap<String, Integer>() {{
put("DOMAIN_TYPE_SUBTYPE_ID", R.string.domain_type_subtype_id);
//...
}};
关于如何以好的方式解决问题有什么建议吗?
感觉真的很脆弱,我会避免它
我会做类似的事情,但用 switch 语句代替:
public static int lookupStringRes(String value) { switch (value) { case "DOMAIN_TYPE_SUBTYPE_ID": return R.string.domain_type_subtype_id; // ... default: Log.w("TAG", "Resource not found"); return -1; } }
并不是说这是最好的解决方案,但在我的脑海中,这是我要开始的解决方案。 Map vs Switch 归结为内存 vs 性能,您将以内存为代价在 Map 中进行更快的查找。