SAX Parser问题NullPointer

时间:2011-10-31 21:08:44

标签: android sax

全部,以下代码抛出NullPointerException。

        SAXParserFactory spf = SAXParserFactory.newInstance(); 
        SAXParser sp = spf.newSAXParser(); 

        XMLReader xr = sp.getXMLReader(); 

        dataHandler dataHandler = new dataHandler(); 
        xr.setContentHandler(dataHandler); 

xmldata="<ArrayOfNacionalClass xmlns="http://schemas.datacontract.org/2004/07/ServiceCompras" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><NacionalClass><ProdutoName>Batata Congelada Pré Frita Perdigão 400g</ProdutoName><ProdutoPreco>2,50</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Iogurte Polpa Morango Batavo 540g</ProdutoName><ProdutoPreco>2,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Protetor Solar Loção FPS 15 Sundown 120ml</ProdutoName><ProdutoPreco>16,83</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Costela Bovina Resfriada por kg com Peso Aprox. 1,250 Kg</ProdutoName><ProdutoPreco>10,87</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Refrigerante Pepsi 2 Litros</ProdutoName><ProdutoPreco>2,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Pizza Mussarela Ristorante 340g</ProdutoName><ProdutoPreco>5,98</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Néctar de Uva Del Valle Mais 1,5L</ProdutoName><ProdutoPreco>4,99</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Batata Original Ruffles 400g</ProdutoName><ProdutoPreco>11,70</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bolo de Chocolate Granulado por kg com Peso Aprox. 0,500 Kg</ProdutoName><ProdutoPreco>14,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Sorvete Especial Diamante Negro Kibon 2L</ProdutoName><ProdutoPreco>15,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Bebida Láctea Nescau Fast Nestlé 300ml</ProdutoName><ProdutoPreco>2,38</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Cerveja Pilsen Nova Schin 473ml</ProdutoName><ProdutoPreco>1,69</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Lava Roupas Líquido Concentrado Omo Multiação 315ml</ProdutoName><ProdutoPreco>5,20</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Kit Shampoo e Condicionador Controle de Queda 400ml Pantene Pro-V</ProdutoName><ProdutoPreco>17,00</ProdutoPreco></NacionalClass><NacionalClass><ProdutoName>Amaciante Comfort Original 500ml</ProdutoName><ProdutoPreco>5,00</ProdutoPreco></NacionalClass></ArrayOfNacionalClass>"

InputSource is=new InputSource(new ByteArrayInputStream(xmldata.getBytes()));



try {
      xr.parse(is);
  }catch (Exception e)
  {
     e.printStackTrace();
   }

老实说,我不明白为什么它会给我NullPointer Exception,我也尝试使用stringreader而不是ByteArray而没有运气

请帮助..谢谢

1 个答案:

答案 0 :(得分:0)

当我使用SAXParser时,我发现我需要在文件工作之前将XML标头添加到我的文件中,并且我还需要将所有数据都包含在一个顶级标记中,例如

  private static final String XML_HEADER = "<?xml version=\"1.0\"?><z>";
  private static final String XML_FOOTER = "</z>"

  String xmldata = XML_HEADER + 
                   "<ArrayOfNacionalClass ... your data >" +
                   XML_FOOTER;
  sp.parse(new ByteArrayInputStream(xmldata.getBytes("UTF-8")), 
           this);

如果您的所有数据始终包含在顶级<z></z>标记中,则可能不需要上面的ArrayOfNacionalClass部分。

<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>

如果您将<z></z>标记保留在那里,则需要在DefaultHandler类中处理它们。

如果没有任何帮助,这里有一些您可能会觉得有用的SAXParser示例代码:
http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/

您发布的代码看起来不会编译,除非这是您自己的dataHandler类?如果是这种情况,那么你也应该发布代码。

我建议您使用一个IDE,它可以帮助您在键入时修复编译错误(例如Eclipse)。