Java 带有XMLpullparser的NullPointerException
也许我没看到。我使用xpppullpullparser 这段代码启动XmlPullparser并从http流读取xml数据。这条流确实有效,我测试过了 字符串_text=Java 带有XMLpullparser的NullPointerException,java,android,xml,xmlpullparser,Java,Android,Xml,Xmlpullparser,也许我没看到。我使用xpppullpullparser 这段代码启动XmlPullparser并从http流读取xml数据。这条流确实有效,我测试过了 字符串_text= try { // Startet den XML Leser XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); fac
try {
// Startet den XML Leser
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp = factory.newPullParser();
try {
// Startet die Connection, um XML Daten zu bekommen
URL _url = new URL(url[0]);
HttpURLConnection con = (HttpURLConnection) _url.openConnection();
_text = readStream(con.getInputStream());
// Setzt xml auf Input an
xpp.setInput(new StringReader(_text));
readXML(xpp);
现在是readXML函数。它应该将XML解析为weatherData对象。什么是weatherData并不重要,因为解析不起作用
private weatherData readXML(XmlPullParser xpp)
{
weatherData _result = new weatherData();
try {
int _eventType = xpp.getEventType();
String _name;
while (_eventType != xpp.END_DOCUMENT) {
_name = xpp.getName();
if (_name == null)
Log.i("i", "Tja, null...");
if (_name.equals("city") && _eventType == xpp.START_TAG)
{
int _id = Integer.parseInt(xpp.getAttributeValue("", "id"));
Log.i("_id", new Integer(_id).toString());
}
xpp.next();
_eventType = xpp.getEventType();
}
}
catch (Exception e)
{
Log.e("i", "exception: " + e.getMessage() + " " + e.getLocalizedMessage());
}
return _result;
}
getName只给了我一个空字符串。有什么想法,为什么?很难确定这里发生了什么,因为您没有发布正在解析的XML,也没有发布任何关于具体发生在哪里的附加信息
但是,当eventType等于XmlPullParser.TEXT时,XmlPullParser在getName上返回null是很自然的,这表示已读取字符数据,并且可以通过调用getText来使用字符数据。在本例中,您需要调用getText方法来获取XML标记的内容 从Logcat发布日志您可以发布xml吗?指向xml is日志的链接是03-08 12:41:41.208 19603-19760/com.test.wetter.wetterapp I/I﹕ Tja,空。。。03-08 12:41:41.209 19603-19760/com.test.wetter.wetterapp E/i﹕ 例外:nullhey到xml的链接是空的,它在德国失败了吗?如果是,那么这就是你的问题。您需要确保检查事件类型是什么,如果是文本,则需要调用getText来分配Country xml标记的内部值{int\u id=Integer.parseIntxpp.getAttributeValue,id;//Log.i\u id,new Integer\u id.toString;\u result.set\u id\u id;}现在将首先查看是否有普通标记。感谢您的提示。