【问题标题】:Android XML parsing安卓 XML 解析
【发布时间】:2011-01-01 23:46:58
【问题描述】:

出现了一个奇怪的问题...我检查了几个网站,但没有发现代码有任何问题...但它返回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 作为参数。

【问题讨论】:

  • 您能粘贴完整的 NPE 堆栈吗?
  • 另外,您是否检查过据称错误陈述中的任何引用是否为空?
  • 是的,我已经检查过了,我对此充满信心......因为正如我之前所告知的......它对于大约 1 页 xml 的较小文件运行完美......但它为其他人返回 null
  • 你没有说你实际检查的 url 不为空。自信不等于知道。
  • 我检查得很完美...网址不为空...

标签: xml android parsing nullpointerexception


【解决方案1】:

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

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

干杯。

【讨论】:

  • 感谢瓦伦丁。实际上,我本人很想在这里发帖。因为我在粘贴的 sn-p 之间有全局定义和大量代码。感谢 4 位您宝贵的 cmets...
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      查看以上网址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...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 2015-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多