2014-03-31 122 views
0

以下是我從服務器獲取XML的代碼,但是當XML很大時,出現內存不足錯誤您能否告訴我需要更改我的代碼大xml存在時出現內存不足錯誤

@Override 
    protected String doInBackground(String... arg0) { 
     String result = ""; 

     HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet(getString(R.string.requesturl)); 
     // Execute the request 
     HttpResponse response; 
     try { 
      response = httpclient.execute(httpget); 

      // Get hold of the response entity 
      HttpEntity entity = response.getEntity(); 

      if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { 
       result = EntityUtils.toString(response.getEntity()); 
      } 

     } catch (Exception e) { 
     } 
     return result; 
    } 

    @Override 
    protected void onPostExecute(String result) 
    { 
    progressDialog.dismiss(); 
    ParseResponse parse=new ParseResponse(); 
    InputSource is = new InputSource(new StringReader(result)); 
    Gesmes gesmes=parse.parseXML(is); 
      } 

這似乎很好地工作時,XML是小 這裏是我的logcat:

03-31 15:01:25.547: E/AndroidRuntime(9791): java.lang.OutOfMemoryError 
    03-31 15:01:25.547: E/AndroidRuntime(9791):  at  java.util.ArrayList.add(ArrayList.java:118) 
    03-31 15:01:25.547: E/AndroidRuntime(9791):  at com.parser.ParseResponse.parseXML(ParseResponse.java:64) 
    03-31 15:01:25.547: E/AndroidRuntime(9791): at com.europeanexchangerates.MainActivity$AsyncCurrency.onPostExecute(MainActivity.java:426) 
    03-31 15:01:25.547: E/AndroidRuntime(9791): at com.europeanexchangerates.MainActivity$AsyncCurrency.onPostExecute(MainActivity.java:1) 
     03-31 15:01:25.547: E/AndroidRuntime(9791):  at android.os.AsyncTask.finish(AsyncTask.java:632) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     03-31 15:01:25.547: E/AndroidRuntime(9791):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at android.os.Handler.dispatchMessage(Handler.java:102) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at android.os.Looper.loop(Looper.java:136) 
     03-31 15:01:25.547: E/AndroidRuntime(9791):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at java.lang.reflect.Method.invokeNative(Native Method) 
     03-31 15:01:25.547: E/AndroidRuntime(9791):  at java.lang.reflect.Method.invoke(Method.java:515) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     03-31 15:01:25.547: E/AndroidRuntime(9791): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
+1

請發表您的logcat –

回答

1

儘量把

largeHeap:"true"

在您的清單中。

考慮不是在模擬器中測試它,而是在真實的設備中進行測試。

還考慮減少你的xml的大小。

0

爲您添加此行到您的mainfest代碼可能需要更多的內存給應用程序這種類型的錯誤...

<application 
    android:largeHeap="true" 
         > 
    .......... 
    ................ 
</appliaction> 
0

而不是使用largeHeap =「真」,你應該考慮使用SAX解析器解析XML。一個DOM解析器最終會導致大xml的內存不足錯誤,並且會導致大文件的解析非常緩慢。

0

嘗試安卓largeHeap =「true」以增加堆大小爲您menifest您的應用程序。一些設備具有固定數量的應用程序使用的內存,例如每個應用程序64 MB。或者使用縮放和緩存來修復使用我的應用程序的內存。已經看這些鏈接http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

如何增加Android應用程序的堆大小?

謝謝。

相關問題