0
我有一个.xml文件,如下所示:故障解析XML数据
<entry>
<question>Which is larger? An elephant or a cat?</question>
<answer>Elephant</answer>
</entry>
我下面的教程,我试图从.xml文件中的数据解析成TextViews。但是,在下面的代码中,除去else if块(位于第二个while循环之下)将允许应用程序运行而不会失败,但会将结果留在应用程序中而不响应。我已经查看了代码,但我仍然无法找出错误的原因。
TextView tvQuestion = (TextView) findViewById(R.id.tvQuestion);
TextView tvAnswer = (TextView) findViewById(R.id.tvAnswer);
XmlResourceParser parser = getResources().getXml(R.xml.qa);
try
{
while(parser.next() != XmlPullParser.END_TAG)
{
if(parser.getEventType() != XmlPullParser.START_TAG)
{
continue;
}
String name = parser.getName();
if(name.equals("entry"))
{
String question = "";
String answer = "";
while(parser.next() != XmlPullParser.END_TAG)
{
if(parser.getEventType() != XmlPullParser.START_TAG)
{
continue;
}
name = parser.getName();
if(name.equals("question"))
{
question = readText(parser);
tvQuestion.setText(question);
}
else if(name.equals("answer"))
{
answer = readText(parser);
tvAnswer.setText(answer);
}
}
}
}
}
catch(XmlPullParserException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
private String readText(XmlPullParser parser) throws XmlPullParserException, IOException
{
String result = "";
if(parser.next() == XmlPullParser.TEXT)
{
result = parser.getText();
parser.nextTag();
}
return result;
}
发布错误日志以及。 –
应用程序不响应,即当UI线程被阻塞5秒或更多时显示ANR。可能你的解析器代码有一个无限循环。在调试器中执行代码以了解您的解析器循环未终止的原因。 – laalto
在遍历代码之后,我发现第一个while循环和下面的if语句之间存在无限循环。为了解决这个问题,我在while语句中添加了一个额外的条件:'while(parser.next()!= XmlPullParser.END_TAG && parser.getEventType()!= XmlPullParser.END_DOCUMENT)' – Jesse