SOAP响应非常大-Android-内存不足错误
我有一个应用程序,该应用程序在首次运行时需要通过对Web服务的SOAP调用下载大量数据。然后将响应发送到一个函数,该函数转换XML并将数据存储在db文件中。
数据大小超过16MB,并且每次都有java.lang.OutOfMemoryError。
修改Web服务以提供较小量的数据不是一种选择。
有没有办法可以下载大数据?也许像InputStream一样?
这是我的代码
public Protocol[] getProtocols() { String METHOD_NAME = "GetProtocols";
String SOAP_ACTION = "urn:protocolpedia#GetProtocols";
Log.d("service", "getProtocols");
SoapObject response = invokeMethod(METHOD_NAME, SOAP_ACTION);
return retrieveProtocolsFromSoap(response);
}
private SoapObject invokeMethod(String methodName, String soapAction) {
Log.d(TAG, "invokeMethod");
SoapObject request = GetSoapObject(methodName);
SoapSerializationEnvelope envelope = getEnvelope(request);
return makeCall(envelope, methodName, soapAction);
}
有人可以建议在这种情况下应该怎么做吗?
谢谢
回答:
有两种策略可以帮助您解决此问题:
下载时将SOAP XML流直接保存到磁盘。不要将其存储在内存中。
使用SAX样式的解析器对其进行解析,在该解析器中,您无需将整个DOM加载到内存中,而是以块的形式进行解析。
根据要处理的XML的类型,使用SAX解析器通常在代码上更难。您将不得不自己跟踪许多事情,并且将无法在DOM树的各个部分之间“跳转”。但是内存消耗将更低。
但是请注意,许多“高级”网络通信库通常将整个XML DOM加载到内存中,在这里可能就是这种情况。您可能必须自己创建和管理HTTP连接,然后手动解析结果。
以上是 SOAP响应非常大-Android-内存不足错误 的全部内容, 来源链接: utcz.com/qa/414673.html