Android - null对象引用,解析RSS文件

问题描述:

任何人都可以帮助我理解这个错误吗?我尝试解析一个xml文件并获取内容。但每次我得到这个错误。有很多人有类似的错误,但没有帮助我。Android - null对象引用,解析RSS文件

08-17 10:34:18.589 25213-25567/com.example.entwicklung1.designtestapp E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 
                        Process: com.example.entwicklung1.designtestapp, PID: 25213 
                        java.lang.RuntimeException: An error occurred while executing doInBackground() 
                         at android.os.AsyncTask$3.done(AsyncTask.java:309) 
                         at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
                         at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
                         at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                         at java.lang.Thread.run(Thread.java:818) 
                        Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'org.w3c.dom.NodeList org.w3c.dom.Node.getChildNodes()' on a null object reference 
                         at com.example.entwicklung1.designtestapp.ReadRssZander.ProcessXml(ReadRssZander.java:66) 
                         at com.example.entwicklung1.designtestapp.ReadRssZander.doInBackground(ReadRssZander.java:58) 
                         at com.example.entwicklung1.designtestapp.ReadRssZander.doInBackground(ReadRssZander.java:29) 
                         at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                         at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                         at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                         at java.lang.Thread.run(Thread.java:818) 

这是我的代码的一部分。我甚至不能用“物品”来寻找孩子。我得到的错误已经在这里:NodeList items = channel.getChildNodes();

@Override 
protected Void doInBackground(Void... params) { 
    ProcessXml(Getdata()); 
    return null; 
} 

private void ProcessXml(Document data) { 
    if(data!=null) { 
     Element root = data.getDocumentElement(); 
     Node channel = root.getChildNodes().item(1); 
     NodeList items = channel.getChildNodes(); 

     //for(int i=0;i<items.getLength();i++){ 
     // Node currentchild = items.item(i); 
     // Log.d("textcontent",currentchild.getTextContent()); 
      // if(currentchild.getNodeName().equalsIgnoreCase("item")){ 
      //  NodeList itemchilds=currentchild.getChildNodes(); 
      //  for(int j=0;j<itemchilds.getLength();j++){ 
      //   Node current= itemchilds.item(j); 
      //   Log.d("textcontent",current.getTextContent()); 
      //  } 
      // } 
     //} 
    } 
} 

public Document Getdata(){ 
    try { 
     url = new URL(adress); 
     HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestMethod("GET"); 
     InputStream inputStrem = connection.getInputStream(); 
     DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder=builderFactory.newDocumentBuilder(); 
     Document xmlDoc =builder.parse(inputStrem); 
     return xmlDoc; 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

此北京时间XML文件,我尝试解析:Link

+0

你可以张贴的文件内容了。 –

+0

@Koss你可以戳你的XML数据? –

+0

我添加了XML文件的链接。 – Koss

,我发现我的问题的解决方案。我正在寻找一个错误的项目。

正确的项目,我需要的是Node channel = root.getChildNodes().item(0); 而不是Node channel = root.getChildNodes().item(1);