非常大的SOAP响应 –Android-内存不足错误

非常大的SOAP响应 –Android-内存不足错误,第1张

概述我有一个应用程序,我需要在第一次运行时通过SOAP调用将大量数据下载到Web服务中.然后将响应发送到一个函数,该函数转换XML并将数据存储在db文件中.数据大小超过16MB,每次都有一个java.lang.OutOfMemoryError.修改Web服务以提供较少量的数据不是一种选择.有没有办法能够下载大数

我有一个应用程序,我需要在第一次运行时通过SOAP调用将大量数据下载到Web服务中.然后将响应发送到一个函数,该函数转换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-内存不足错误全部内容,希望文章能够帮你解决非常大的SOAP响应 – Android-内存不足错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1103559.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存