使用XML定义地图,将其放入res / xml并解析到HashMap。 如果要保留键顺序解析到LinkedHashMap。 简单的实现如下:
res/xml中的地图资源:
<?xml version="1.0" encoding="utf-8"?>
<map linked="true"><entry key="key1">value1</entry><entry key="key2">value2</entry><entry key="key3">value3</entry>
</map>
资源解析器:
public class ResourceUtils {public static Map<String,String> getHashMapResource(Context c, int hashMapResId) {Map<String,String> map = null;XmlResourceParser parser = c.getResources().getXml(hashMapResId);String key = null, value = null;try {int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_DOCUMENT) {Log.d("utils","Start document");} else if (eventType == XmlPullParser.START_TAG) {if (parser.getName().equals("map")) {boolean isLinked = parser.getAttributeBooleanValue(null, "linked", false);map = isLinked ? new LinkedHashMap<String, String>() : new HashMap<String, String>();} else 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;}
}