当前位置: 首页 > 面试题库 >

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

师冥夜
2023-03-14
问题内容

我有一个应用程序,该应用程序在首次运行时需要通过对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-内存不足错误 主题。 由于我的英语能力很弱,并且这个问题很相似,为了便于理解,我复制了一些陈述段落。 我有一个需要通过SOAP调用将大量数据下载到Web服务的应用程序。然后将响应发送到显示XML文件的函数。 数据大小超过11MB,并且每次都有 java.lang.OutOfMemoryError 。 修改Web服务以提供较少

  • 问题内容: 编译Android项目时如何解决? 升级到Android Studio版本1后,我得到了这个。但是,我不认为这是问题所在。当我开始将应用程序升级到SDK 21之前(这是在SDK 20之前)的可能性最大。但是我也不是很确定。 我在Google周围搜索了一些 修复程序,但找不到可行的解决方案。大多数修复是针对Eclipse IDE的。 这是编译时遇到的完整logcat错误: 是因为我使用了

  • 问题内容: 我是Netbeans中这种错误的新手。我一直在使用Java Bean 8.0.2在Java J2SE中工作。我正在对字符串进行模糊搜索,通常字符串长度为300-500。我正在使用Levenshtein和Jaro Winkler算法来查找字符串之间的距离。大约有1500次迭代来查找字符串之间的距离!问题是我的Net Bean通常会为以下内容提供错误: 我已经在线进行了一些搜索来摆脱此错误

  • 上周,我们在生产环境中遇到了内存不足的错误。这种内存不足的错误可能每周发生一次,当前的解决方案是重新启动应用程序服务器。我们使用的是glassfish 3.0.1。生成的堆转储约为5GB。 请帮助分析下面的堆转储。下面是使用eclipse MAT生成的泄漏嫌疑人报告。我们如何分析下面的报告?

  • 问题内容: 在我的Android项目中,我有imageButton,单击它之后,它必须使用imageView打开新的Activity,在我的新Activity中,我必须只能看到ImageButton的大字体图像,图像大小为17mb,并且内存不足错误。但是我的代码适用于较小尺寸的图像。有人可以帮助调整图像大小或更改某些位图选项或以其他方式提出建议吗?我是android的新手,对不起,英语不好:) 这

  • 问题内容: 我正在使用位图。它抛出内存不足错误(5次中的2次)。如何避免。 以下是我的代码 : 问题答案: 你得到的OutOfMemoryError因为你没有 那些你用 尝试那些你使用它们后