Android KSoap soapEnvelope bodyIn和getResponse()问题

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/";

我使用以下代码通过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 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。希望我能帮助你。