Android SAX解析器问题空指针

Android SAX解析器问题空指针,android,sax,Android,Sax,总之,下面的代码正在抛出NullPointerException SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); dataHandler dataHandler = new dataHandler(); xr

总之,下面的代码正在抛出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();
   }
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
dataHandler dataHandler=新dataHandler();
xr.setContentHandler(dataHandler);
XML数据=“Baata Congelada PréFrita Perdigão 400g2,50Iogurte Polpa Morango Batavo 540g2,20Protetor Solar Loão FPS 15日落120ml16,83Costela Bovina Resfrida por kg比索Aprox。1250 Kg10,87制冷剂百事可乐2 Litros2,99比萨餐厅340g5,98Néctar de Uva Del Valle Mais 1,5L4,99bata原味荷叶边400g11,70Bolo de Chocolate Granulato por kg com Peso Aprox。0500 Kg14,00 Sorvet特别是Diamante Negro Kibon 2L15,38Bebida Láctea Nescau Fast Nestlé300ml2,38Cerveja Pilsen Nova Schin 473ml1,69Lava Group AS Líquido Concentrado Omo Multiação 315ml5,20Kit香波e Condivor Controle de Queda 400ml Pantene Pro-V17,00 Amaciate Comfort原版500ml5,00“
InputSource is=新的InputSource(新的ByteArrayInputStream(xmldata.getBytes());
试一试{
xr.parse(is);
}捕获(例外e)
{
e、 printStackTrace();
}
我真的不明白为什么它会给我空指针异常,我也尝试使用stringreader而不是ByteArray,但没有成功


请帮助..谢谢

当我使用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);
如果将我的
标记保留在中,则需要在DefaultHandler类中处理它们

如果这些都没有帮助,下面是一些SAXParser的示例代码,您可能会发现它们很有用:

您发布的代码看起来不会被编译,除非这是您自己的dataHandler类?如果是这样,那么您也应该发布相应的代码


我建议您使用IDE来帮助您在键入时修复编译错误(例如Eclipse)。

dataHandler dataHandler=new dataHandler();
没有任何意义。这永远不会编译。类以大写字母开头。您是否也可以发布异常的堆栈跟踪?10-31 21:29:44.043:WARN/System.err(364):org.xml.sax.SAXException:未指定输入。实际上datahandler是一个扩展DefaultHandler的类,并且它可以编译,我更改了名称以避免混淆我仍然得到NullPointer…起初我认为我的xml格式不正确,但它不是,如果我检查InputSource变量,我会得到SystemID和PublicID的null。有趣吗ByTestStream属性包含了足够多的数据。你在上面更新的答案中尝试过我的建议吗?一定要先从非常简单的数据开始!实际上问题出在datahandler类中。我修复了,然后用xml数据填充了该类。谢谢
<ArrayOfNacionalClass>your data</ArrayOfNacionalClass>