我最近开始在 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 响应在某个点(在节点内)被简单地切断了。
我在库中找到了引入此异常的提交,并且您可以看到它在响应为空时启动(或者有错误,我猜): 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());
}