私は最近、特に応答を受け取ったときに、AndroidでkSOAP2を操作する際にいくつかの問題が発生し始めました。複数のAVDと物理デバイスでテストされた問題は次のとおりです。
ローカルコンピューターで実行されているWebサービスに要求を送信し始めましたが、通常、応答を受信すると次の例外が発生します。
01-15 17:15:43.819: E/SOAP(2904): java.lang.IllegalStateException: getInputStream() is not available. Is this a reentrant call?
私が最も気になるのは、最初は常に発生することですが、現在は、物理デバイスを介してリクエストを送信した場合にのみ発生します(現在、AVDは適切な応答を受け取ります)。
また、最初はトラフィックを調べて、正しい形式の応答を受信しているかどうかを確認することにしましたが、SOAP応答が(ノード内の)ある時点で単純に切断されていることがわかりました。
ライブラリでこの例外を導入したコミットを見つけました。ご覧のとおり、応答がnullの場合(またはエラーがある場合)に起動されます:http://gitorious.org/ginger/libcore/commit/ c6dae581716b9362a5c7f166c80a7f2b46ed1124 / diffs?diffmode = sidebyside&fragment = 1
何か案は?:)
編集:私は呼び出しが行われる場所にコードを添付しています:
ListRQ rq = new ListRQ(c, l, s, "");
PropertyInfo pi = new PropertyInfo();
pi.setName("request");
pi.setValue(rq);
pi.setType(rq.getClass());
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.setOutputSoapObject(request);
envelope.addMapping(Params.NAMESPACE, "ListRQ", ListRQ.class);
MarshalDouble md = new MarshalDouble();
md.register(envelope);
HttpTransportSE htse = new HttpTransportSE(Params.URL);
htse.debug = true;
try {
htse.call(Params.GetList.SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.getResponse();
Log.d("SOAP", response.toString());
}
catch(Exception e) {
Log.e("SOAP", e.toString());
}