Java 读取XML时出错

Java 读取XML时出错,java,android,xml,Java,Android,Xml,我正在为Android创建一个应用程序,它包括读取一个XML文件,将XML中的一些数据添加到一个ArrayList中,该ArrayList被放入一个微调器中。 代码如下: package com.rezoluz.fsx_pocket; import java.util.ArrayList; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputSt

我正在为Android创建一个应用程序,它包括读取一个XML文件,将XML中的一些数据添加到一个ArrayList中,该ArrayList被放入一个微调器中。 代码如下:

package com.rezoluz.fsx_pocket;

import java.util.ArrayList;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.os.Environment;

public class Scanner extends Main {

    public ArrayList<String> getCategorys() throws XmlPullParserException, IOException {
        ArrayList<String> categorys = new ArrayList<String>();
        categorys.add("Please select a category");
        //START ADDING HERE
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser parser = factory.newPullParser();
        File file = new File(Environment.getExternalStorageDirectory()+ "/fsx_kneeboard/categories.xml");
        FileInputStream fis = new FileInputStream(file);
        parser.setInput(new InputStreamReader(fis));
        parser.next();
        int eventType = parser.getEventType();
        int Categories = 0;
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG && parser.getName().equals("categories")) {
                Categories++;
            } if (eventType == XmlPullParser.START_TAG && parser.getName().equals("category") && Categories == 1) {
                Categories++;
            } if (eventType == XmlPullParser.START_TAG && parser.getName().equals("name") && Categories == 2) {
                categorys.add(parser.getText());
            }
            parser.next();
        }
        return categorys;

    }
}
以下是它试图读取的XML文件:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<categories>
  <category>
    <name>Simulator Commands</name>
    <id>1</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>2</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>3</id>
  </category>
  <category>
    <name>General Aircraft Commands</name>
    <id>4</id>
  </category>
  <category>
    <name>Light Commands</name>
    <id>5</id>
  </category>
  <category>
    <name>Radio Commands</name>
    <id>6</id>
  </category>
  <category>
    <name>Autopilot Commands</name>
    <id>7</id>
  </category>
  <category>
    <name>Intrument Commands</name>
    <id>8</id>
  </category>
  <category>
    <name>View Commands</name>
    <id>9</id>
  </category>
  <category>
    <name>Slew Keys</name>
    <id>10</id>
  </category>
  <category>
    <name>Mission Commands</name>
    <id>11</id>
  </category>
  <category>
    <name>Multiplayer Commands</name>
    <id>12</id>
  </category>
  <category>
    <name>C172 Intrument Panels</name>
    <id>13</id>
  </category>
  <category>
    <name>BE58 Intrument Panels</name>
    <id>14</id>
  </category>
</categories>

模拟器命令
1.
控制面命令
2.
控制面命令
3.
通用飞机司令部
4.
灯光命令
5.
无线电命令
6.
自动驾驶仪指令
7.
仪表命令
8.
查看命令
9
回转键
10
任务指挥部
11
多人游戏命令
12
C172仪表板
13
BE58仪表板
14

谢谢你的时间和帮助。zeokila

第31行Scanner.java中有一个NullPointerException:

E/AndroidRuntime(6625): Caused by: java.lang.NullPointerException
E/AndroidRuntime(6625): at com.rezoluz.fsx_pocket.Scanner.getCategorys(Scanner.java:31)

最好的解决方案可能是使用已有的库进行序列化。尝试我个人使用这个库,我真的很满意。

在Shortcuts.java第78行中,该行的内容有一个错误
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<categories>
  <category>
    <name>Simulator Commands</name>
    <id>1</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>2</id>
  </category>
  <category>
    <name>Control Surface Commands</name>
    <id>3</id>
  </category>
  <category>
    <name>General Aircraft Commands</name>
    <id>4</id>
  </category>
  <category>
    <name>Light Commands</name>
    <id>5</id>
  </category>
  <category>
    <name>Radio Commands</name>
    <id>6</id>
  </category>
  <category>
    <name>Autopilot Commands</name>
    <id>7</id>
  </category>
  <category>
    <name>Intrument Commands</name>
    <id>8</id>
  </category>
  <category>
    <name>View Commands</name>
    <id>9</id>
  </category>
  <category>
    <name>Slew Keys</name>
    <id>10</id>
  </category>
  <category>
    <name>Mission Commands</name>
    <id>11</id>
  </category>
  <category>
    <name>Multiplayer Commands</name>
    <id>12</id>
  </category>
  <category>
    <name>C172 Intrument Panels</name>
    <id>13</id>
  </category>
  <category>
    <name>BE58 Intrument Panels</name>
    <id>14</id>
  </category>
</categories>
E/AndroidRuntime(6625): Caused by: java.lang.NullPointerException
E/AndroidRuntime(6625): at com.rezoluz.fsx_pocket.Scanner.getCategorys(Scanner.java:31)