我在一些活动中有以下代码,它可以很好地读取和解析XML文件,但是在阅读小型XML文件时我有两个活动,我得到一个空指针异常,无法弄清楚问题是什么:
while (eventType != XmlResourceParser.END_DOCUMENT) {
if ((eventType == XmlResourceParser.START_TAG) ||
(eventType == XmlResourceParser.TEXT)) {
// Get the name of the tag (eg scores or score)
String strName = xmlSymptoms.getName();
if (helpFound == 1){
helpText = xmlSymptoms.getText();
helpFound = 0;
} else if (strName.equals("string") && (eventType == XmlResourceParser.START_TAG)) {
helpFound = 1;
}
}
eventType = xmlSymptoms.next();
}
当我在“<string>
”中阅读时,会发生空指针异常,我可以在其他活动中使用相同的代码读入。在此活动中,我可以读取其他XML令牌,直到我转到“<string>
”。
这是我的调试窗口
线程[&lt; 1&gt;主要](暂停)
ActivityThread.performLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2628
ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord,Intent)行:2679
ActivityThread.access $ 2300(ActivityThread,ActivityThread $ ActivityRecord,Intent)行:125
ActivityThread $ H.handleMessage(消息)行:2033
ActivityThread $ H(Handler).dispatchMessage(Message)行:99
Looper.loop()行:123
ActivityThread.main(String [])行:4627
Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)line:not available [native method]
Method.invoke(Object,Object ...)行:521
ZygoteInit $ MethodAndArgsCaller.run()行:868
ZygoteInit.main(String [])行:626
NativeStart.main(String [])行:不可用[native method]
线程[&lt; 6&gt; Binder Thread#2](正在运行)
线程[&lt; 5&gt; Binder Thread#1](正在运行)
我运行了LogCat,但没有显示任何内容。
以下是一些有效的XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>A</key>
<array>
<string>ABANDONED, feeling: </string>
<string>ABSCESS: </string>
</array>
</dict>
</plist>
这里有一些不起作用的XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>HOWTOTAKE</key>
<array>
<string> Put two pellets in 8 oz bottle of water.</string>
</array>
</dict>
</plist>
最后一点:当我到达“<string>
”字段时,getName()返回“null”而不是“string”。显然是想告诉我一些事情,我无法弄清楚为什么会返回“null”。
任何想法如何调试这个?
答案 0 :(得分:0)
我弄清楚问题是什么。由于我正在寻找XmlResourceParser.TEXT,当(eventType == XmlResourceParser.TEXT)为true时,strName.equals(“string”)为null。将代码更改为仅在(eventType == XmlResourceParser.START_TAG)为true时检查(strName.equals(“string”),修复了问题,如下面的代码所示:
while (eventType != XmlResourceParser.END_DOCUMENT) {
if ((eventType == XmlResourceParser.START_TAG) ||
(eventType == XmlResourceParser.TEXT)) {
// Get the name of the tag (eg scores or score)
String strName = xmlSymptoms.getName();
if (helpFound == 1){
helpText = xmlSymptoms.getText();
helpFound = 0;
} else if ( (eventType == XmlResourceParser.START_TAG)) {
if (strName.equals("string") ){
helpFound = 1;
}
}
}
eventType = xmlSymptoms.next();
}
}