3

ksoap2 で webservice メソッドを呼び出すために、次のコードを使用しています。

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
            envelope.dotNet = true;

            envelope.setOutputSoapObject(request);
            HttpTransportSE androidHttpTransport = new HttpTransportSE(url,
                    TimeOutInSeconds * 1000);

            try {
                androidHttpTransport.call(soapAction, envelope);
            } catch (Exception e) {

            }

            SoapObject so = (SoapObject) envelope.getResponse();

状況によっては、webservice が要求にすぐに応答せず、アプリが待機中でandroidHttpTransport.call(soapAction, envelope);、ユーザーが要求をキャンセルしたい場合があります。callユーザーにメソッドをキャンセルさせるにはどうすればよいですか?

4

1 に答える 1

0

UI/メイン スレッドではなく、バックグラウンド スレッドからこの行を呼び出すことを願っています。実際、HC+ では、StrictMode によりデフォルトでクラッシュするはずです。

進行中のネットワーク コールをキャンセルするのは難しい場合があります。shutdown()接続自体への参照を保持し、メイン スレッドからメソッドを呼び出す必要がある場合があります。ただし、キャンセルがすぐに呼び出されるという保証はありません。接続自体の実装に依存します。

kSOAP を使用していると仮定していますが、それがcancel()メカニズムを提供しているかどうかはわかりません。

もう 1 つの方法は、最初の呼び出しが完了するのを待ってから、別のネットワーク呼び出しを行って、サーバーでの操作を元に戻すことです。これにより、状態が同期されます。

于 2012-08-13T05:18:58.263 に答える