3

请帮忙....

我正在调用一个返回大型肥皂对象的 Web 服务方法,并且我得到了OutOfMemoryException.

我怎么能避免呢?有没有办法做到这一点?

SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);           
envelope.dotNet=true;  
envelope.setOutputSoapObject(request);  
try  {     
    httpTransport.call(SOAP_ACTION, envelope);// Here I am getting error 
}   
catch(Exception e){} 

我很感激任何帮助。最好的问候,莱昂纳多

4

2 回答 2

1

android 设备的堆大小非常小(大约 16MB),因此如果您的 SOAP 响应返回大量数据,读取所有这些数据并将其转换为肥皂对象可能会使您的设备抛出内存不足错误。

我遇到了类似的问题,最简单的方法是执行以下操作

  1. 收到您的肥皂响应后,将其作为 XML 保存在磁盘上
  2. 然后使用 XML 解析器从 XML 中获取您想要的任何数据(创建对象或存储到数据库)

这就是我解决问题的方法-非常大的 SOAP 响应-Android-内存不足错误

于 2011-06-21T10:19:17.873 回答
0

如果您获得大量数据,最好的方法是使用线程。使用带有进度对话框的线程,这对于不必等待并看到应用程序“冻结”之类的用户会更加友好。

示例(只是为了向您展示我的意思,您必须按照自己的方式使用它):

public class YourActivity extends Activity implements Runnable {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    // Your code...
    SoapSerializationEnvelope envelope = new    SoapSerializationEnvelope(SoapEnvelope.VER11);           
    envelope.dotNet=true;  
    envelope.setOutputSoapObject(request); 

    // Running the thread
    Thread thread = new Thread(this);
    thread.start();
}

@Override
public void run() {
    try  {     
        httpTransport.call(SOAP_ACTION, envelope);// Here I am getting error 
    }   
    catch(Exception e){} 
}

祝你好运!

于 2011-05-28T00:30:44.290 回答