Android KSoap soapEnvelope bodyIn和getResponse()问题
我使用以下代码通过soap调用一个方法。它工作得很好Android KSoap soapEnvelope bodyIn和getResponse()问题,android,web-services,ksoap2,getresponse,Android,Web Services,Ksoap2,Getresponse,我使用以下代码通过soap调用一个方法。它工作得很好 private static final String SOAP_ACTION = "http://tempuri.org/GetAuthenticateUser"; private static final String METHOD_NAME = "GetAuthenticateUser"; private static final String NAMESPACE = "http://tempuri.org/";
private static final String SOAP_ACTION = "http://tempuri.org/GetAuthenticateUser";
private static final String METHOD_NAME = "GetAuthenticateUser";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://stage.mysite.com/FinancialSnapshotService/Service.asmx?WSDL";
// I have tried http://stage.mysite.com/FinancialSnapshotService/Service.asmx also
public void getResults() {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("vstrUserID", "vk@gmail.com");
request.addProperty("vstrPassword", "password");
SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
soapEnvelope.dotNet = true;
soapEnvelope.setOutputSoapObject(request);
HttpTransportSE aht = new HttpTransportSE(URL);
try {
aht.setXmlVersionTag("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
aht.call(SOAP_ACTION, soapEnvelope);
SoapObject result = (SoapObject) soapEnvelope.getResponse();
Log.d("WS", String.valueOf(result));
} catch (Exception e) {
e.printStackTrace();
}
}
private静态最终字符串SOAP\u ACTION=”http://tempuri.org/GetAuthenticateUser";
私有静态最终字符串方法\u NAME=“GetAuthenticateUser”;
私有静态最终字符串命名空间=”http://tempuri.org/";
私有静态最终字符串URL=”http://stage.mysite.com/FinancialSnapshotService/Service.asmx?WSDL";
//我试过了http://stage.mysite.com/FinancialSnapshotService/Service.asmx 也
public void getResults(){
SoapObject请求=新的SoapObject(名称空间、方法名称);
request.addProperty(“vstrUserID”)vk@gmail.com");
addProperty(“vstrPassword”、“password”);
SoapSerializationEnvelope soapEnvelope=新的SoapSerializationEnvelope(
第11版);
soapEnvelope.dotNet=true;
setOutputSoapObject(请求);
HttpTransportSE aht=新的HttpTransportSE(URL);
试一试{
aht.setXmlVersionTag(“”);
aht.call(SOAP\u动作,soapEnvelope);
SoapObject结果=(SoapObject)soapEnvelope.getResponse();
Log.d(“WS”,String.valueOf(result));
}捕获(例外e){
e、 printStackTrace();
}
}
但是,当我尝试在同一服务器的其他方法中使用相同的代码时,它给出了
ClassCastException:org.ksoap2.SoapFault
。如果我更改行SoapObject结果=(SoapObject)soapEnvelope.getResponse()代码>到SoapObject结果=(SoapObject)soapEnvelope.bodyIn代码>,它可以完美地工作。有人能告诉我这段代码的基本原理是什么,在哪里使用bodyIn
以及在哪里使用getResponse()
?如果你去那里,你会看到中的主体没有序列化,而get response给你的soapobject已经序列化了。这就是我所理解的,如果我错了,我很抱歉
我也有同样的问题,因为我的Web服务在里面给了我html,如果这也是你的问题,我建议你在Web服务端对anser进行编码
加把劲
catch(SOAPE故障){
SoapObject结果=soapEnvelope.BodyIn;
}
我使用以下代码来解决这个问题
try{
result = (SoapObject) soapEnvelope.getResponse();
}catch (ClassCastException e) {
result = (SoapObject)soapEnvelope.bodyIn;
}
但我仍然不清楚为什么会发生这种情况。这是因为它无法解析答案。想象一下,html标记可以将解析getresponse将所有内容放在o soapobejct中。当他不能解析那里的值时,你就有了soapfault。然后,您需要解析buy-hand:S。希望我能帮助你。