2012-11-15 25 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