LoginSignup
0
0

More than 5 years have passed since last update.

XMLリソースファイルからHashMapを生成する

Last updated at Posted at 2017-10-19
res/xml/monsters.xml
<?xml version="1.0" encoding="utf-8"?>
<map linked="true">
    <entry key="4">ゲリョス</entry>
    <entry key="1">アイルー</entry>
    <entry key="5">リオレイア</entry>
    <entry key="2">イャンクック</entry>
    <entry key="3">ドスジャギィ</entry>
    <entry key="6">リオレウス</entry>
</map>
ResourceUtils
public class ResourceUtils {
    private static final String LOG_TAG = "ResourceUtils";

    public static Map<String, String> getHashMapSS(Context context, int resourceId) {
        Map<String, String> map = null;
        String key = null;
        String value = null;

        try {
            XmlResourceParser parser = context.getResources().getXml(resourceId);
            int eventType = parser.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_DOCUMENT) {
                    Log.d(LOG_TAG, "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 (key == null) {
                            parser.close();
                            return null;
                        }
                    }
                } else if (eventType == XmlPullParser.END_TAG) {
                    if (parser.getName().equals("entry")) {
                        Log.d(LOG_TAG, "Put " + key + ":[" + value + "]");
                        map.put(key, value);
                        key = null;
                        value = null;
                    }
                } else if (eventType == XmlPullParser.TEXT) {
                    if (key != null) {
                        value = parser.getText();
                    }
                }
                eventType = parser.next();
            }
            Log.d(LOG_TAG, "End document");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return map;
    }
}
usage
LinkedHashMap<String, String> monsters = (LinkedHashMap<String, String>) ResourceUtils.getHashMapSS(context, R.xml.monsters);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0