我试图定义一个利用资源的静态哈希表,但由于不可能静态地访问资源而受阻。
然后我意识到定义静态映射最好的地方是资源文件本身。
如何在XML中定义映射?我认为,如果可能的话,它应该类似于Listpreference机制,具有条目和条目-值。
发布于 2012-04-18 02:09:13
如何在XML中定义映射?
<thisIsMyMap>
<entry key="foo">bar</entry>
<entry key="goo">baz</entry>
<!-- as many more as your heart desires -->
</thisIsMyMap>
将其放入res/xml/
中,并使用getResources().getXml()
加载它。遍历事件以构建HashMap<String, String>
。
发布于 2014-02-07 05:46:23
更简单的选择是使用两个数组。这样做的好处是不需要再次迭代xml文件,使用的代码更少,使用不同类型的数组也更直接。
<string-array name="myvariablename_keys">
<item>key1</item>
<item>key1</item>
</string-array>
<string-array name="myvariablename_values">
<item>value1</item>
<item>value2</item>
</string-array>
那么你的java代码应该是这样的:
String[] keys = this.getResources().getStringArray(R.array.myvariablename_keys);
String[] values = this.getResources().getStringArray(R.array.myvariablename_values);
LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
for (int i = 0; i < Math.min(keys.length, values.length); ++i) {
map.put(keys[i], values[i]);
}
发布于 2015-03-10 06:04:48
你总是可以在你的strings.xml
文件中嵌入Json:
res/values/strings.xml
<string name="my_map">{"F":"FOO","B":"BAR"}</string>
在你的活动中,你可以在onStart
方法中构建你的地图:
private HashMap<String, String> myMap;
@Override
protected void onStart() {
super.onStart();
myMap = new Gson().fromJson(getString(R.string.my_map), new TypeToken<HashMap<String, String>>(){}.getType());
}
这段代码需要Google Gson API才能运行。您可以使用Android SDK中内置的Json API来完成此操作。
至于静态访问Map,您可以创建一个静态方法:
private static HashMap<String, String> method(Context context) {
HashMap<String, String> myMap = new Gson().fromJson(context.getString(R.string.serve_times), new TypeToken<HashMap<String, String>>(){}.getType());
return myMap;
}
https://stackoverflow.com/questions/10196015
复制相似问题