调用Web服务时Android应用中的OutOfMemoryError

时间:2011-05-28 00:08:21

标签: android ksoap

请帮助....

我正在调用一个返回大型soap对象的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){} 

我感谢任何帮助。 最好的祝福, 莱昂纳多

2 个答案:

答案 0 :(得分:1)

android设备的堆大小非常小(约16MB),因此如果您的SOAP响应返回大量数据,则读取所有这些数据并将其转换为soap对象可能会导致设备丢失内存错误。

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

  1. 正如你的肥皂反应一样 收到,将其保存为XML 磁盘
  2. 然后使用XML解析器 得到你想要的任何数据 XML(创建对象或存储到 一个db)
  3. 这就是我解决问题的方法 - Very large SOAP response - Android- out of memory error

答案 1 :(得分: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){} 
}
祝你好运!