3

助けてください....

大きな 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){} 

助けていただければ幸いです。よろしく、レオナルド

4

2 に答える 2

1

Android デバイスのヒープ サイズは非常に小さい (約 16MB) ため、SOAP 応答が大量のデータを返す場合、このすべてのデータを読み取って SOAP オブジェクトに変換すると、デバイスでメモリ不足エラーが発生する可能性があります。

同様の問題に直面しましたが、最も簡単な方法は次のことです

  1. SOAP 応答を受信したら、それを 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 に答える