У меня есть приложение для 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();
Можете ли вы разместить код –
отредактированный !! Я добавил свой метод get, проверьте его –
Используйте xmlpullparser http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html –