xmlpullparser
没有读取我的第二个标记term
。它总是迭代两次:第一次,内部标记被正确识别为appname
,但第二次,它是null
。
public static List<Term> readConfig(XmlPullParser parser)
throws XmlPullParserException, IOException
{
List<Term> terms = null;
parser.require(XmlPullParser.START_TAG, ns, "app");
while (parser.next() != XmlPullParser.END_TAG)
{
if (parser.getEventType() != XmlPullParser.START_TAG)
{
continue;
}
String innerTag = parser.getName();
if (innerTag.equals("appname"))
{
Logger.log("2");
}
else if (innerTag.equals("term"))
{
// terms = readTerm(parser);
Logger.log("1");
}
}
return terms;
}
我的xml文件
<?xml version="1.0" encoding="UTF-8"?>
<app>
<appname>abdalla</appname>
<term>term1</term>
</app>
例外
Caused by: java.lang.NullPointerException: asset
at android.content.res.AssetManager.getAssetRemainingLength(Native Method)
at android.content.res.AssetManager.access$300(AssetManager.java:36)
at android.content.res.AssetManager$AssetInputStream.available(AssetManager.java:555)
at java.io.InputStreamReader.read(InputStreamReader.java:234)
at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1496)
at org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1340)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:390)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:310)
at model.XMLParser.readConfig(XMLParser.java:55)
at com.example.xmlparser.MainActivity.onCreate(MainActivity.java:47)
at android.app.Activity.performCreate(Activity.java:5133)
答案 0 :(得分:0)
我找到答案我用
修复了上面的代码 else if (eventType == XmlPullParser.END_TAG && tagName.equals(APP))
{
break;
}
完整的代码
public static List<Term> readConfig(XmlPullParser parser)
throws XmlPullParserException, IOException
{
List<Term> terms = new ArrayList<Term>();
parser.require(XmlPullParser.START_TAG, ns, APP);
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
{
String tagName = parser.getName();
if (eventType == XmlPullParser.START_TAG && tagName.equals(APP))
{
// Attrubites
String name = parser.getAttributeValue(null, "name");
Logger.log(name);
}
else if (tagName != null && tagName.equals(TERM))
{
terms.add(readTerm(parser));
}
else if (eventType == XmlPullParser.END_TAG && tagName.equals(APP))
{
break;
}
eventType = parser.next();
}
return terms;
}