2012-11-15 24 views
0

我從服務器獲取數據:的OutOfMemoryError在KXmlParser

HttpTransportSE androidhttpTranport = new HttpTransportSE(URL, ContantSystem.TimeOut); 
androidhttpTranport.call(SOAP_ACTIONS, envelope); 
Object responseBody = responseBody = envelope.getResponse(); 

我的應用程序顯示了一個exceiption:

11-07 19:54:41.283: E/AndroidRuntime(10620): FATAL EXCEPTION: Thread-1851 
11-07 19:54:41.283: E/AndroidRuntime(10620): java.lang.OutOfMemoryError 
11-07 19:54:41.283: E/AndroidRuntime(10620): at java.lang.String.<init>(String.java:432) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:642) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at java.lang.StringBuilder.toString(StringBuilder.java:663) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.kxml2.io.KXmlParser.readValue(KXmlParser.java:1419) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.kxml2.io.KXmlParser.next(KXmlParser.java:390) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.kxml2.io.KXmlParser.next(KXmlParser.java:310) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.kxml2.io.KXmlParser.nextText(KXmlParser.java:2056) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.DM.readInstance(DM.java:34) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.SoapSerializationEnvelope.readInstance(SoapSerializationEnvelope.java:462) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:420) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.SoapSerializationEnvelope.readUnknown(SoapSerializationEnvelope.java:289) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.SoapSerializationEnvelope.read(SoapSerializationEnvelope.java:422) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.serialization.SoapSerializationEnvelope.parseBody(SoapSerializationEnvelope.java:149) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:137) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.transport.Transport.parseResponse(Transport.java:100) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:195) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:95) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at jp.osaka.APPLIActivity.getMarterDB(APPLIActivity.java:408) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at jp.osaka.APPLIActivity.access$0(APPLIActivity.java:390) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at jp.osaka.APPLIActivity$myrunable.run(APPLIActivity.java:369) 
11-07 19:54:41.283: E/AndroidRuntime(10620): at java.lang.Thread.run(Thread.java:856) 

我的數據是大約2.4MB(5.000.000個字符)。我的設備的內存是否有限制?爲什麼?

回答

1

內存限制是針對整個應用程序,而不是僅針對http。所以你有很多內存在應用程序的其他地方使用,或者你的手機整體的內存很低。儘管它很可能是你的應用程序。在您的應用程序中運行hprof並查看您是否泄漏了引用。相信大型Java程序中的內存管理與C++一樣需要儘可能多的努力,並且Android的框架可以很容易地將大量傳遞給它的對象像活動一樣泄漏出去。

+0

如果我在我的設備上安裝了一些應用程序,內存限制是否更小? – mum

+0

不是。限制是每個應用限制。設備之間的限制究竟有什麼不同。請記住,應用程序中的圖像等內容也會佔用內存(大塊),因此請將其清理乾淨。 –

+0

我可以設置我的應用程序的內存限制嗎? – mum