リソースを利用する静的ハッシュ テーブルを定義しようとしていましたが、リソースに静的にアクセスできないことに阻まれました。
次に、静的マップを定義するのに最適な場所はリソース ファイル自体であることに気付きました。
XML でマップを定義するにはどうすればよいですか? 可能であれば、エントリとエントリ値を使用して、Listpreference メカニズムに似ている必要があると思います。
質問する
23611 次
5 に答える
40
より簡単なオプションは、2 つの配列を使用することです。これには、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]);
}
于 2014-02-06T21:46:23.490 に答える
33
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>
。
于 2012-04-17T18:09:12.767 に答える
12
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;
}
于 2015-03-09T22:04:47.893 に答える
6
正しい答えは上記の CommonsWare によって言及されましたが、XML 解析はそれほど単純ではないため、この目的のための単純なパーサーに従ってください。
public static Map<String, String> getHashMapResource(Context context, int hashMapResId) {
Map<String, String> map = new HashMap<>();
XmlResourceParser parser = context.getResources().getXml(hashMapResId);
String key = null, value = null;
try {
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_TAG) {
if (parser.getName().equals("entry")) {
key = parser.getAttributeValue(null, "key");
if (null == key) {
parser.close();
return null;
}
}
}
else if (eventType == XmlPullParser.END_TAG) {
if (parser.getName().equals("entry")) {
map.put(key, value);
key = null;
value = null;
}
} else if (eventType == XmlPullParser.TEXT) {
if (null != key) {
value = parser.getText();
}
}
eventType = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return map;
}
于 2015-04-24T20:02:18.443 に答える