Java 在onCreate中永远无法访问XML解析器
我基于以下Android文档示例创建了一个XML解析器: 文档的实现与我自己的实现之间的主要区别在于我试图在我的活动中实现XML解析器——然而,当我尝试这样做时,代码似乎无法到达,尽管它在onCreate中(我认为这将启动它)我不确定到底应该做些什么来纠正这个问题,但是非常感谢您的任何建议/意见 我曾尝试在解析器末尾移动右括号,但最终出现84个新错误(大部分是重复的局部变量错误-如果需要,我可以提供它们) 我相信我需要将括号保留在原来的位置,并以某种方式从AndroidDocs示例中调用解析器,但我不确定应该如何做到这一点Java 在onCreate中永远无法访问XML解析器,java,android,xml,parsing,Java,Android,Xml,Parsing,我基于以下Android文档示例创建了一个XML解析器: 文档的实现与我自己的实现之间的主要区别在于我试图在我的活动中实现XML解析器——然而,当我尝试这样做时,代码似乎无法到达,尽管它在onCreate中(我认为这将启动它)我不确定到底应该做些什么来纠正这个问题,但是非常感谢您的任何建议/意见 我曾尝试在解析器末尾移动右括号,但最终出现84个新错误(大部分是重复的局部变量错误-如果需要,我可以提供它们) 我相信我需要将括号保留在原来的位置,并以某种方式从AndroidDocs示例中调用解析器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// ///////////////////////////////////////////////////////
// Read and Parse XML Data from BootConfiguration
// ///////////////////////////////////////////////////////
public List parse(InputStream in) throws XmlPullParserException,
IOException {
try {
XmlPullParser parser = Xml.newPullParser();
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in, Environment.getExternalStorageDirectory()
+ "/BootConfiguration.xml");
parser.nextTag();
return readFeed(parser);
} finally {
in.close();
}
}
private List readFeed(XmlPullParser parser) throws XmlPullParserException,
IOException {
List entries = new ArrayList();
parser.require(XmlPullParser.START_TAG, ns, "feed");
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
// Starts by looking for the entry tag
if (name.equals("BootConfiguration")) {
entries.add(readEntry(parser));
} else {
skip(parser);
}
}
return entries;
}
public static class Entry {
public final String url;
public final String user;
public final String password;
private Entry(String url, String user, String password) {
this.url = url;
this.user = user;
this.password = password;
}
}
// Parses the contents of an entry. If it encounters a title, summary, or
// link tag, hands them off
// to their respective "read" methods for processing. Otherwise, skips the
// tag.
private Entry readEntry(XmlPullParser parser)
throws XmlPullParserException, IOException {
parser.require(XmlPullParser.START_TAG, ns, "BootConfiguration");
String url = null;
String user = null;
String password = null;
while (parser.next() != XmlPullParser.END_TAG) {
if (parser.getEventType() != XmlPullParser.START_TAG) {
continue;
}
String name = parser.getName();
if (name.equals("ServiceUrl")) {
url = readUrl(parser);
} else if (name.equals("ApiUser")) {
user = readUser(parser);
} else if (name.equals("ApiPassword")) {
password = readPassword(parser);
} else {
skip(parser);
}
}
return new Entry(url, user, password);
}
// Processes title tags in the feed.
private String readUrl(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "ServiceUrl");
String url = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "ServiceUrl");
return url;
}
// Processes title tags in the feed.
private String readUser(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "ApiUser");
String user = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "ApiUser");
return user;
}
// Processes summary tags in the feed.
private String readPassword(XmlPullParser parser) throws IOException,
XmlPullParserException {
parser.require(XmlPullParser.START_TAG, ns, "ApiPassword");
String password = readText(parser);
parser.require(XmlPullParser.END_TAG, ns, "ApiPassword");
return password;
}
// For the tags title and summary, extracts their text values.
private String readText(XmlPullParser parser) throws IOException,
XmlPullParserException {
String result = "";
if (parser.next() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
return result;
}
private void skip(XmlPullParser parser) throws XmlPullParserException,
IOException {
if (parser.getEventType() != XmlPullParser.START_TAG) {
throw new IllegalStateException();
}
int depth = 1;
while (depth != 0) {
switch (parser.next()) {
case XmlPullParser.END_TAG:
depth--;
break;
case XmlPullParser.START_TAG:
depth++;
break;
}
}
// //////////////////////////////////////////////////////
// End XML Parser
// //////////////////////////////////////////////////////
你在哪里调用解析?我看不出来。您需要做的是从onCreate调用parse方法,然后决定需要对返回的列表执行哪些操作。显然,您需要一些UI元素来显示这个列表。您没有调用任何解析方法,所以我并不奇怪它们从未被访问过。如果你想使用它,你需要在onCreate中调用一个。我明白。。。我需要帮助理解调用它们的正确方式(这是我第一次使用xml解析器,对此我非常陌生)