2015-06-02 45 views
0

我的XML的文件:NullPointerException异常,而在相同的标签解析XML

<job_id>000273E060E87000C0001323FA21427120150602153306</job_id> 
<job_id>000273E060E87000C0001323FA21427120150602153342</job_id> 
<job_id>000273E060E87000C0001323FA21427120150602153419</job_id> 

我在这里得到一个NullPointerException:

protected ArrayList<HashMap<String, String>> doInBackground(URL... urls) { 
     if (cd.isConnectingToInternet()) { 
      XMLParser xmlParser = new XMLParser(); 
      String xml = xmlParser.getXMLFromUrl("http://www.example.de/android.php?f=1200"); 
      Document doc = xmlParser.getDomElement(xml); 
      writeToFile(xml, "xmlfilesnames"); 

      NodeList noteListFileNames = doc.getElementsByTagName("tasklist"); 

      for (int i = 0; i <= noteListFileNames.getLength(); i++) { 

       HashMap<String, String> map = new HashMap<String, String>(); 
       Element e = (Element) noteListFileNames.item(i); 

       map.put("job_id", xmlParser.getValue(e, "job_id")); 
       xmlFileNames.add(map); 

      } 

在:map.put("job_id", xmlParser.getValue(e, "job_id"));当for循环运行的第二次。

堆栈跟踪:

java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
     at java.lang.Thread.run(Thread.java:841) 
Caused by: java.lang.NullPointerException 
     at xmlParsing.XMLParser.getValue(XMLParser.java:88) 
     at de.example.app.ListViewActivity$DownloadXMLFilesName.doInBackground(ListViewActivity.java:298) 
     at de.example.app.ListViewActivity$DownloadXMLFilesName.doInBackground(ListViewActivity.java:281) 
     at android.os.AsyncTask$2.call(AsyncTask.java:288) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 

在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:231) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:587) 在java.lang.Thread.run(Thread.java:841)

的XML的文件看起来像:

<?xml version="1.0" encoding="utf-8"?> 
<tasklist> 
<job_id>000273E060E87000C0001323FA21427120150602153306</job_id> 
<job_id>000273E060E87000C0001323FA21427120150602153342</job_id> 
<job_id>000273E060E87000C0001323FA21427120150602153419</job_id> 
</tasklist> 

第一圈

xmlFileNames:

000273E060E87000C0001323FA21427120150602153419 

地图:

000273E060E87000C0001323FA21427120150602153419 

二次回路 xmlFileNames:

000273E060E87000C0001323FA21427120150602153342 
000273E060E87000C0001323FA21427120150602153342 

地图:

000273E060E87000C0001323FA21427120150602153342 

第三环路

xmlFileNames

000273E060E87000C0001323FA21427120150602153419 
000273E060E87000C0001323FA21427120150602153419 
000273E060E87000C0001323FA21427120150602153419 

地图:

000273E060E87000C0001323FA21427120150602153419 
+3

请发布堆栈跟踪,因为我们还不知道,NPE在哪里抛出。 – flogy

+0

哦原谅我...我已经发布了我的堆栈跟踪 – korunos

回答

1

建议立即进行删除d是小于在比不小于或等于循环

for (int i = 0; i <= noteListFileNames.getLength(); i++) 

应该

for (int i = 0; i < noteListFileNames.getLength(); i++) 

除了您进一步的问题:

尝试改变:

Element e = (Element) noteListFileNames.item(i); 

map.put("job_id", xmlParser.getValue(e, "job_id")); 
xmlFileNames.add(map); 

至:

Element e = (Element) noteListFileNames.item(i); 

NodeList children = e.getChildNodes(); 

for (int j = 0; j < children.getLength(); j++) { 
    if (children.item(j).getNodeName().equals("job_id")) { 
     map.put(children.item(j).getNodeName(), 
     children.item(j).getTextContent()); 
     xmlFileNames.add(map); 
    } 
} 

或类似的东西。不确定您正在使用哪个解析器。

+0

它解决了我的NPE问题,但是我的xmlFileNames只有第一个job_id ...它只是循环一次 – korunos

+0

这是因为您正在查找KEVOX_tasklist元素,只有一个。你需要循环的兄弟姐妹也是job_id的 – slarge

+0

你确定你拉下整个XML文件? –