0

私はアンドロイドで SOAP 解析を使用しています。私のアプリケーションでは、バイト配列タイプのデータもある大量のデータをダウンロードする必要があるポイントが 1 つあります。

解決策については、リンクVery large SOAP response - Android- out of memory error but not able to get how can it works with my soap object. を参照しました。

石鹸応答を取得するために使用している方法は次のとおりです。

public SoapObject taskDetail() {

    SoapObject result = null;

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    request.addProperty("ID", "4");
    request.addProperty("fromDate", "02/06/2013");       
        request.addProperty("toDate", "02/06/2013");

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.dotNet = true;

    envelope.setOutputSoapObject(request);

    AndroidHttpTransport transport = new AndroidHttpTransport(URL);

    transport.debug = true;

    try {
        transport.call(SOAP_ACTION, envelope);

        result = (SoapObject)envelope.getResponse();

        for(int i=0; i<result.getPropertyCount(); i++) {
                SoapObject view_task_master = (SoapObject) result.getProperty(i);

        screen = view_task_master.getProperty("Screen").toString();
        Log.i("screen",screen);

        date = view_task_master.getProperty("Createddate").toString();
        Log.i("date",date);

    }




        } 
        catch (IOException e) {
            Log.i("IOException",e.getMessage());
        } 
        catch (XmlPullParserException e) {
            Log.i("XMLPullParserException",e.getMessage());
        }
            return result;
    }

主な問題は、データが大きいために結果オブジェクトが処理できないことです。
助けてください...よろしくお願いします...!!

4

2 に答える 2

0

ContentHandlerを使用します。データを含むタグを見つけたら、characters() メソッドを使用して、入力ストリームから文字配列を取得し、ファイルまたは DB に書き込みます。この方法では、すべてのデータを RAM に保持する必要はありません。(これは、soap オブジェクトに BLOB が含まれている場合の解決策です)

また、AsyncTask は、実行時間の長いネットワーク リクエストを実行するための最良の方法ではないことに注意してください (execute() で開始した場合、現時点で 3.0 以降で実行できる AsyncTask は 1 つだけです)。

于 2013-04-13T16:05:59.880 に答える