2010-01-06 140 views
0

一个奇怪的问题也随之而来......我检查几个网站,但没有发现任何错误的代码...但它返回NullPointerException ...Android的XML解析

try { 

    SAXParserFactory f = SAXParserFactory.newInstance(); 
    SAXParser parser = f.newSAXParser(); 
    XMLReader reader = parser.getXMLReader(); 
    reader.setContentHandler(handler); 
    System.out.println(uri_this); 
    reader.parse(new InputSource(url_this.openStream())); // i get nullpointerexception here 

} catch (NullPointerException e) { 
    System.out.println(e); 
} 

在catch语句我抓到了NullPointerException,并将其打印出错。

ContentHandler很好,因为我有对小文件解析的文件,但对于较大的文件,它似乎并没有工作。问题是什么?或者我需要缓冲更大的文件?我很无能,并且尝试了除缓冲外的所有可能性,因为我不知道编码。

我想出1两件事:输入源的对象被释放之前reader.parse可以完成。我不明白为什么会发生。

LogCat提供了以下(仅错误的部分):

01-06 15:12:27.145: INFO/System.out(319): http://mywebsite.com/products_xml.php?cPath=43 
01-06 15:12:31.094: DEBUG/dalvikvm(319): GC freed 4031 objects/203424 bytes in 189ms 
01-06 15:12:31.505: DEBUG/dalvikvm(100): GC freed 3326 objects/190192 bytes in 283ms 
01-06 15:12:34.274: DEBUG/dalvikvm(319): GC freed 1153 objects/80432 bytes in 146ms 
01-06 15:12:34.646: INFO/System.out(319): java.lang.NullPointerException 

我得到的URL “url_this” 4米构造函数作为参数。

+1

你可以粘贴NPE的完整堆栈吗? – 2010-01-06 09:40:44

+0

另外,你有没有检查在所谓的错误陈述中的任何引用是否为空? – Samuh 2010-01-06 10:10:24

+0

是的samuh我已经检查了,并且m自信的回合那......因为我早先通知...它运行完美的小文件约1页的xml值...但它为其他人返回空 – JaVadid 2010-01-06 10:13:23

回答

0

嗨,thanx all of u。我弄错了。实际上在1例中没有开始和结束标签之间的文本......因此,我存储文本的变量为空...我对此调用了.toString()。导致一个异常 - NullPointerException。感谢所有4你的帮助。

2

没有足够的信息来帮助你在这里,但你有没有注意到,你在shell打印出一个变量,名为uri_this但是提领URL被解析?所以,仅仅因为日志文件显示http://mywebsite.com/products_xml.php?cPath=43它并不自动意味着,该变量网址被初始化,还包含字符串。

或者它可能是链接对象(它是什么类型)上的OpenStream()方法,在某些情况下返回null,InputSource中不能处理被传入构造空。正如我所说 - 短小snipplet中没有足够的信息来解决您的问题。

干杯。

+0

Thanx Valentin。其实我自己曾经在这里贴过邮件。因为我拥有全局定义,并且在我粘贴的代码段之间有很多代码。 Thanx 4你宝贵的意见... – JaVadid 2010-01-08 12:36:14

0

我刚刚发布了一个库,使XML解析Android上10倍很容易,它是目前。它是一个非常小的抽象层,位于运行时提供的现有xml拉解析库之上,并允许您使用简单的类似xpath的路径来获取解析值。

性能的影响几乎没有对现有解析操作的顶部,这是一个非常简单/干净的实现: http://www.thebuzzmedia.com/software/simple-java-xml-parser-sjxp/

0

检查上面的网址在XMLParser.java

取得 http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

变化

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet(url); 
HttpResponse httpResponse = httpClient.execute(httpGet); 
HttpEntity httpEntity = httpResponse.getEntity(); 
xml = EntityUtils.toString(httpEntity); 

它会工作InshaAllah ...