2014-09-09 6 views
0

У меня есть приложение для Android, которое вызывает веб-сервис и получает новости в формате xml!java.lang.OutOfMemoryError - Очень большой ответ SOAP

Это дает мне outOfMemoryError при разборе большого количества новостей!

как я могу исправить это пожалуйста?! любая помощь ?!

это моя ошибка LogCat:

09-09 09:17:38.404: E/AndroidRuntime(31578): FATAL EXCEPTION: AsyncTask #4 
09-09 09:17:38.404: E/AndroidRuntime(31578): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-09 09:17:38.404: E/AndroidRuntime(31578): at android.os.AsyncTask$3.done(AsyncTask.java:299) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.util.concurrent.FutureTask.setException(FutureTask.java:219) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.util.concurrent.FutureTask.run(FutureTask.java:239) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.lang.Thread.run(Thread.java:856) 
09-09 09:17:38.404: E/AndroidRuntime(31578): Caused by: java.lang.OutOfMemoryError 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.lang.String.<init>(String.java:255) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.lang.String.<init>(String.java:171) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at java.lang.String.<init>(String.java:141) 
09-09 09:17:38.404: E/AndroidRuntime(31578): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:190) 

мой метод, чтобы получить данные с сервера

if(categories.equals("") || categories.isEmpty() || categories == null) 
      categories = "1;2;3;4;5;6;7;"; 
      getReportsObjZ.country = "0"; 
      getReportsObjZ.category = categories; 
      getReportsObjZ.fdate = date_from; 
      getReportsObjZ.tdate = date_to; 

      try 
      { 
       SharePoint_GetReportsByCatCntryResponse response = smartSearchSoap.SharePoint_GetReportsByCatCntry(getReportsObjZ); 

       reportsXML = smartSearchSoap.getCountriesListFromService(); 
      } 

      catch (Exception e) 
      { 
       e.printStackTrace(); 
      } 

      XMLParser parser = new XMLParser(); 

      Document doc = parser.getDomElement(reportsXML); 

      NodeList nl = doc.getElementsByTagName(TAG_LIST); 

      dbObject.open(); 


      dbObject.delete_ALL_ROWS(); 

      for (int i = 0; i < nl.getLength(); i++) 
      { 
       Element e = (Element) nl.item(i); 

       String just_date_without_time = getJustDATE(parser.getValue(e,TAG_CREATED_P)); 
       String just_time_without_date = getJustTIME(parser.getValue(e,TAG_CREATED_P)); 
       String numberical_category = ""; 



       dbObject.createEntry(parser.getValue(e, TAG_TITLE), 
         parser.getValue(e, TAG_COUNTRY_ID), 
         parser.getValue(e, TAG_DESCRIPTION), 
         parser.getValue(e, TAG_IDP), 
         removeSpecialChars(parser.getValue(e, TAG_CATEGORYP)), 
         just_date_without_time, just_time_without_date, 
         parser.getValue(e, TAG_CREATED_BY), 
         parser.getValue(e, TAG_TAGS), 
         parser.getValue(e, TAG_READ_BY), 
         removeSpecialChars(parser.getValue(e, TAG_CITY)), 
         (parser.getValue(e, TAG_DIR)), 
         removeSpecialChars(parser.getValue(e, TAG_LINK)),numberical_category); 
      } 

      dbObject.close(); 
+0

Можете ли вы разместить код –

+0

отредактированный !! Я добавил свой метод get, проверьте его –

+0

Используйте xmlpullparser http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html –

ответ

1

Есть ограничения кучи для андроида, читать данные XML в куски из файла и разобрать его удобно

ИЛИ

Попробуйте поставить android:largeHeap="true" в теге приложения в файле манифеста.

+0

У меня уже есть это в моем манифесте –

+1

, тогда существуют ограничения кучи для android, прочитайте данные XML в кусках из вашего файла и проанализируйте его удобно –

+0

нормально, как я могу это сделать, не меняя веб-сервис? могу ли я сделать это в своем приложении для Android?! –

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