我最近开始在使用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());
}