Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java,如何在Android架构中引用非标准类型的xml对象?_Java_Android_Xml_Hashmap - Fatal编程技术网

使用Java,如何在Android架构中引用非标准类型的xml对象?

使用Java,如何在Android架构中引用非标准类型的xml对象?,java,android,xml,hashmap,Java,Android,Xml,Hashmap,我刚刚开始学习创建Android应用程序,我正在努力解决一个看似非常基本的问题 我试图创建一个从XML加载的HashMap。但是,我无法确定以这种方式存储的映射的资源ID是什么。我已使用此问题的解决方案: 我面临的问题是如何准确地构造res文件夹,以及如何引用res文件夹中的数据 以下是我目前拥有的: 资源解析器: public class ResourceUtils { public static Map<String,String> getHashMapResource(

我刚刚开始学习创建Android应用程序,我正在努力解决一个看似非常基本的问题

我试图创建一个从XML加载的HashMap。但是,我无法确定以这种方式存储的映射的资源ID是什么。我已使用此问题的解决方案:

我面临的问题是如何准确地构造res文件夹,以及如何引用res文件夹中的数据

以下是我目前拥有的:

资源解析器:

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;

        ...

        }

        return map;
    }
}
公共类ResourceUtils{
公共静态映射getHashMapResource(上下文c,int hashMapResId){
Map=null;
XmlResourceParser=c.getResources().getXml(hashMapResId);
字符串键=null,值=null;
...
}
返回图;
}
}

<?xml version="1.0" encoding="utf-8"?>
<map name = "testMap" linked="true">
    <entry key="key1">value1</entry>
    <entry key="key2">value2</entry>
    <entry key="key3">value3</entry>
</map>

价值1
价值2
价值3
因此,要获得映射,我需要在对getHashMapResource的调用中正确输入资源ID,但我找不到如何做到这一点!我试过:

  • R.string.map
  • R.map.testMap
  • R.xml.map
  • R.xml.testMap
我没有主意了。我相信这个问题对于了解这一点的人来说是微不足道的,但我在这个地方找不到任何有用的东西。谢谢:)

package com.plumtestongo.sample;
导入android.content.Context;
导入android.content.res.XmlResourceParser;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入org.xmlpull.v1.XmlPullParser;
导入java.util.HashMap;
导入java.util.LinkedHashMap;
导入java.util.Map;
公共类MainActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Map Map=getHashMapResource(这个,R.xml.Map);
Log.i(“Hello”,map.toString());
}
公共映射getHashMapResource(上下文c,int hashMapResId){
Map=null;
XmlResourceParser=c.getResources().getXml(hashMapResId);
字符串键=null,值=null;
试一试{
int eventType=parser.getEventType();
while(eventType!=XmlPullParser.END_文档){
if(eventType==XmlPullParser.START\u文档){
日志d(“utils”、“启动文件”);
}else if(eventType==XmlPullParser.START_标记){
if(parser.getName().equals(“map”)){
boolean isLinked=parser.getAttributeBoleAnValue(null,“linked”,false);
map=isLinked?新建LinkedHashMap():新建HashMap();
}else if(parser.getName().equals(“条目”)){
key=parser.getAttributeValue(null,“key”);
if(null==键){
parser.close();
返回null;
}
}
}else if(eventType==XmlPullParser.END_标记){
if(parser.getName().equals(“条目”)){
map.put(键、值);
key=null;
值=空;
}
}else if(eventType==XmlPullParser.TEXT){
if(null!=键){
value=parser.getText();
}
}
eventType=parser.next();
}
}捕获(例外e){
e、 printStackTrace();
返回null;
}
返回图;
}
}

我测试了这段代码,它是有效的。您所需要的只是使用R.xml.map

资源xml文件应具有
标记作为根。查看字符串资源文件
package com.plumtestongo.sample;

import android.content.Context;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import org.xmlpull.v1.XmlPullParser;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



     Map<String,String>  map = getHashMapResource(this,R.xml.map);
        Log.i("Hello",map.toString());
    }




    public  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;
}

}