2013-12-20 2 views
2

Я получаю это исключение при анализе XML, но не всегда. После ошибки Когда я снова попробую снова, он работает. Но почему я получаю sometomes эту ошибку? Вот мой код и ошибка.Android SAXParseException: Неожиданный конец документа

 StringEntity entity = new StringEntity(author, "UTF-8");   
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     SharedPreferences logIn = context.getSharedPreferences("Data", Context.MODE_PRIVATE); 
     HttpPost httppost = new HttpPost(logIn.getString("Url", "")); 
     httppost.setEntity(entity); 
     httppost.addHeader("Accept", "text/xml");    
     httppost.addHeader("Content-Type", "text/xml"); 
     HttpResponse response = httpClient.execute(httppost);       
     HttpEntity r_entity = response.getEntity(); 
     xmlRecords = EntityUtils.toString(r_entity); 
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     InputSource is = new InputSource(); 
     is.setCharacterStream(new StringReader(xmlRecords)); 
     Document doc = db.parse(is); 
      NodeList workItemsNode = doc.getElementsByTagName("Items"); 
     for (int i = 0; i < workItemsNode.getLength(); i++) { 

       //Some Code here 

      } 

Исключение

org.xml.sax.SAXParseException: Неожиданный конец документа на org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse (DocumentBuilderImpl.java:125) в com.mobile.syrinx.services.SynchroniseWorkItemsService.FillLists (SynchroniseWorkItemsService.java:101) на com.mobile.syrinx.services.SynchroniseWorkItemsService.doInBackground (SynchroniseWorkItemsService.java:65) на com.mobile.syrinx.services. синхронизировать roniseWorkItemsService.doInBackground (SynchroniseWorkItemsService.java:1) в android.os.AsyncTask $ 2.call (AsyncTask.java:252) в java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305) на Java .util.concurrent.FutureTask.run (FutureTask.java:137) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1081) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java : 574) на java.lang.Thread.run (Thread.java:1020)

ответ

2

1) Убедитесь, что вы получаете правильный XML. Если вы используете XML, предоставленный вам из веб-службы, хорошо, кто знает, что вы получаете. Недопустимый XML может вызвать проблемы для многих этих парсеров. Факт, что это происходит только иногда, заставляет меня думать, что, скорее всего, виновник.

Документация DocumentBuilder здесь:

http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.html#parse(org.xml.sax.InputSource)

Вы можете увидеть, что исключение SAX выбрасывается при возникновении ошибки разбора XML, это означает, что XML является недействительным каким-то образом. Исключение должно быть зафиксировано и обработано соответствующим образом.

2) Являются ли файлы, которые вы разыгрываете на разных ОС, чем те, на которых вы действуете? Это вызвало проблемы для меня в прошлом, когда файл Windows вызвал ошибки парсеров в Linux-системах. Это не должно быть проблемой здесь не думаю, но это возможно.

Смежные вопросы