2010-01-06 176 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 ...