0

出现了一个奇怪的问题......我检查了几个网站,但没有发现代码有任何问题......但它返回NullPointerException......

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很好,因为我已经为小文件解析了文件,但对于较大的文件,它似乎不起作用。问题是什么?或者我需要为更大的文件做一些缓冲吗?我一无所知并且尝试了除了缓冲之外的所有可能性,因为我不知道它的编码。

我想出了一件事:输入源的对象在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”4m作为参数。

4

4 回答 4

2

这里没有足够的信息可以帮助您,但是您是否注意到您在 shell 中打印出一个名为uri_this的变量,但取消引用url以进行解析?因此,仅仅因为日志文件显示http://mywebsite.com/products_xml.php?cPath=43它并不自动意味着变量url已初始化并且还包含该字符串。

或者可能是 url 对象(无论它是什么类型)上的 openStream() 方法在某些情况下返回 null 并且 InputSource 无法处理在构造函数中传递 null 的情况。正如我所说 - 简短的片段中没有足够的信息来解决您的问题。

干杯。

于 2010-01-06T12:27:00.070 回答
0

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

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

于 2011-02-23T19:34:05.430 回答
0

检查上面的网址http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

XMLParser.java 中所做的更改

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

它会起作用 InshaAllah ......

于 2013-04-05T10:57:29.353 回答
0

嘿,谢谢你们。我弄错了。实际上在 1 种情况下,开始和结束标记之间没有文本......因此我存储文本的变量为空......我调用了 .toString() 。导致异常 - NullPointerException。感谢所有 4 个您的帮助。

于 2010-01-08T12:34:04.017 回答