使用kSOAP2在Android中获取错误

使用kSOAP2在Android中获取错误,android,web-services,ksoap2,android-ksoap2,Android,Web Services,Ksoap2,Android Ksoap2,我得到的错误是 org.ksoap2.SoapFault不能强制转换为org.ksoap2.serialization.SoapObject public final static String URL = "http://23.253.164.20:8096/login.asmx"; public static final String NAMESPACE = "http://23.253.164.20:8096"; public static final String SOAP_ACTION

我得到的错误是

org.ksoap2.SoapFault不能强制转换为org.ksoap2.serialization.SoapObject

public final static String URL = "http://23.253.164.20:8096/login.asmx";
public static final String NAMESPACE = "http://23.253.164.20:8096";
public static final String SOAP_ACTION_PREFIX = "http://23.253.164.20:8096/getName";
private static final String METHOD = "getName";

private class AsyncTaskRunner extends AsyncTask<String, String, String> {

        private String resp;

        @Override
        protected String doInBackground(String... params) {
            publishProgress("Loading contents..."); // Calls onProgressUpdate()
            try {
                // SoapEnvelop.VER11 is SOAP Version 1.1 constant
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                        SoapEnvelope.VER11);
                SoapObject request = new SoapObject(NAMESPACE, METHOD);
                //bodyOut is the body object to be sent out with this envelope
                envelope.bodyOut = request;
                HttpTransportSE transport = new HttpTransportSE(URL);
                try {
                    transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD, envelope);
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }
                //bodyIn is the body object received with this envelope
                if (envelope.bodyIn != null) {
                    //getProperty() Returns a specific property at a certain index.
                    SoapPrimitive resultSOAP = (SoapPrimitive) ((SoapObject) envelope.bodyIn)
                            .getProperty(0);
                    resp=resultSOAP.toString();
                }
            } catch (Exception e) {
                e.printStackTrace();
                resp = e.getMessage();
            }
            return resp;
        }

        /**
         *
         * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
         */
        @Override
        protected void onPostExecute(String result) {
            // execution of result of Long time consuming operation
            // In this example it is the return value from the web service
            textView.setText(result);
        }
public最终静态字符串URL=”http://23.253.164.20:8096/login.asmx";
公共静态最终字符串命名空间=”http://23.253.164.20:8096";
公共静态最终字符串SOAP\u操作\u前缀=”http://23.253.164.20:8096/getName";
私有静态最终字符串方法=“getName”;
私有类AsyncTaskRunner扩展了AsyncTask{
私有字符串resp;
@凌驾
受保护的字符串doInBackground(字符串…参数){
publishProgress(“加载内容…”);//调用onProgressUpdate()
试一试{
//SOAPEnvelope.VER11是SOAP版本1.1常量
SoapSerializationEnvelope=新的SoapSerializationEnvelope(
第11版);
SoapObject请求=新的SoapObject(名称空间、方法);
//bodyOut是要与此信封一起发送的body对象
envelope.bodyOut=请求;
HttpTransportSE传输=新的HttpTransportSE(URL);
试一试{
调用(名称空间+SOAP\u操作\u前缀+方法,信封);
}捕获(IOE异常){
e、 printStackTrace();
}catch(XMLPullParseRexE){
e、 printStackTrace();
}
//bodyIn是使用此信封接收的body对象
if(envelope.bodyIn!=null){
//getProperty()返回特定索引处的特定属性。
SoapPrimitive结果SOAP=(SoapPrimitive)((SoapObject)信封.bodyIn)
.getProperty(0);
resp=resultSOAP.toString();
}
}捕获(例外e){
e、 printStackTrace();
resp=e.getMessage();
}
返回响应;
}
/**
*
*@see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@凌驾
受保护的void onPostExecute(字符串结果){
//执行耗时较长的操作的结果
//在本例中,它是来自web服务的返回值
setText(结果);
}
可能性检查

1) 互联网许可

2) Ksoap2库已导入

3) 服务器端方法正在运行(您可以输入URL)

4) 不在模拟器上运行,而是在手机上运行


整个代码中有一些bug

  • 没有方法“getName”-看起来你的意思是“getGreetingForName”,但我不确定,因为你没有提供参数“stringName”
  • NAMESPACE=“”;-在末尾添加斜杠
  • 调用(名称空间+SOAP\u操作\u前缀+方法,信封)
  • 这是不正确的-因为此处调用的方法是“”
另请参见我对您第二篇帖子的回答-有登录的工作代码:

问候,, 马辛