【问题标题】:Giving local xml file as an input to a java class in android将本地 xml 文件作为输入提供给 android 中的 java 类
【发布时间】:2013-02-23 23:27:31
【问题描述】:

我在 assets 文件夹中有一个名为 coffee.xml 的本地 xml 文件。

我有以下结构:

1 activity called Game.java
1 class called Units.java
1 class called MyUnit.java which extends Units.java

现在,我正在尝试将 coffee.xml 文件作为 MyUnits.java 文件中的输入。

我看到了很多解决方案,比如使用

getResources() OR
classLoader() etc...

没有任何作用。我还尝试给出直接路径“C:\Users\MyName\Workspace .....coffee.xml” 那也行不通。我完全不知道如何将此文件作为输入。

请指教。谢谢! (这些自动代码检测功能使堆栈溢出变得烦人......这很糟糕。) ======================更多信息========================

在 MyUnit.java 的构造函数中,我调用了一个名为 retrieve() 的函数

这个retrive() 函数基本上接受coffee.xml 文件的输入并从节点检索所有信息并将其分配给MyUnit.java 类对象。我正在使用 SAXParser 这样做。

都是基本的

try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser saxParser = factory.newSAXParser();

        DefaultHandler handler = new DefaultHandler() {
        public void startElement(String uri, String localName,String qName, 
                    Attributes attributes) throws SAXException {
            ....

         }
         };

         saxParser.parse(<your XML File>, handler); <------Problem here
    } catch (Exception e) {
           e.printStackTrace();
        }

我需要知道,如何将我的本地文件coffee.xml 作为标记行的输入。

【问题讨论】:

  • 你必须详细说明这很模糊,你可以参考带有'R' R.layout.coffee 的 xml,我不确定你到底想做什么

标签: java android xml file


【解决方案1】:

资产通过 AssetManager 加载,通过 Context 的返回

getAssets()

方法。因此,在您的 Game Activity 中,您可以调用

AssetManager assetManager = getAssets();
XmlResourceParser xmlParser = assetManager.openXmlResourceParser("coffee.xml");
MyUnit unit = new MyUnit(xmlParser);

从那里,您需要阅读 XmlResourceParser 以从您的 XML 文件中提取属性/标签。可以在XmlPullParser 页面(XmlResourceParser 实现)上找到有关如何遍历 XML 文件的一个很好的示例。

在使用 SAXParser(而不是 Android 提供的解析器)的情况下,您可以改用:

AssetManager assetManager = getAssets();
InputStream is = assetManager.open("coffee.xml");
MyUnit unit = new MyUnit(is);

然后代替你的文件名,使用

saxParser.parse(is, handler);

【讨论】:

  • getAssets() 不起作用。它适用于活动。但是,MyUnits.java 类只是扩展了另一个 Units.java 类,而不是一个活动。这就是整个问题。 :(
  • 是的,您需要从 Android 上下文(例如 Activity)调用 getAssets 并将其传递给您的 Units.java 类。由于资产嵌入在应用程序的 APK 中,而不是 Android 设备上的单独文件,因此没有其他方法可以检索 XML 文件。
  • 我在 MyUnits.java 中使用 SAXParser。现在,我设法使用您建议的方法,按照您的建议创建了一个 XmlResourceParser 对象,我可以将该对象作为代码中提到的 saxParser.parse(, handler) 的输入吗?
  • 我已经编辑了我的答案,添加了一个关于使用 SAXParser 的部分。在这种情况下,您可以使用assetManager.open 来获取一个InputStream,而不是使用assetManager.openXmlResourceParser,然后您可以在构建SAXParser 时使用它来代替您的。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 2017-06-28
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多