服务器端Webservice接口参数使用的是自定义结构体,非通用的一些字符串类。

Android 客户端使用ksoap2 jar包,使用方法如下:

    //调用的方法        String methodName = "sceneUserValidate";        //创建httpTransportSE传输对象        HttpTransportSE ht = new HttpTransportSE(SERVICE_URL);//service url        ht.debug = true;        //使用soap1.1协议创建Envelop对象        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);        //实例化SoapObject对象        SoapObject request = new SoapObject(SERVICE_NS, methodName);        /**         * 设置参数,参数名不一定需要跟调用的服务器端的参数名相同,只需要对应的顺序相同即可         * */                SceneUserValidateEvt sevt = new SceneUserValidateEvt();        sevt.setCallNumber("13913008213");        sevt.setInaccessInfo(new InaccessInfo("0020001","0020001","12","12","v1.0"));        request.addProperty("SceneUserValidateEvt", sevt);                //将SoapObject对象设置为SoapSerializationEnvelope对象的传出SOAP消息        envelope.bodyOut = request;                envelope.setOutputSoapObject(request);        Log.d("haha","start = ");        try{            //调用webService            ht.call(SERVICE_NS+methodName, envelope);            Log.d("haha","dump = "+ht.requestDump);            //txt1.setText("看看"+envelope.getResponse());            if(envelope.getResponse() != null){                SoapObject result = (SoapObject) envelope.bodyIn;                String name = result.getProperty(0).toString();                Log.d("haha","返回值 = "+name);            }else{                Log.d("haha","返回值 =! ");            }        }catch (Exception e) {            e.printStackTrace();        }

运行出现如下错误:

04-12 21:31:12.046: W/System.err(4202): java.lang.RuntimeException: Cannot serialize: com.jh.webservice_visit.SceneUserValidateEvt@41b1ec80
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:664)
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeProperty(SoapSerializationEnvelope.java:649)
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:604)
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeObjectBody(SoapSerializationEnvelope.java:582)
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeElement(SoapSerializationEnvelope.java:658)
04-12 21:31:12.046: W/System.err(4202): at org.ksoap2.serialization.SoapSerializationEnvelope.writeBody(SoapSerializationEnvelope.java:564)
04-12 21:31:12.056: W/System.err(4202): at org.ksoap2.SoapEnvelope.write(SoapEnvelope.java:205)
04-12 21:31:12.056: W/System.err(4202): at org.ksoap2.transport.Transport.createRequestData(Transport.java:111)
04-12 21:31:12.056: W/System.err(4202): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:121)
04-12 21:31:12.056: W/System.err(4202): at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
04-12 21:31:12.056: W/System.err(4202): at com.jh.webservice_visit.MainActivity.startWebservice(MainActivity.java:72)
04-12 21:31:12.056: W/System.err(4202): at com.jh.webservice_visit.MainActivity.access$0(MainActivity.java:40)
04-12 21:31:12.056: W/System.err(4202): at com.jh.webservice_visit.MainActivity$2.run(MainActivity.java:113)

04-12 21:31:12.056: W/System.err(4202): at java.lang.Thread.run(Thread.java:856)


第一反应将SceneUserValidateEvt结构体implementsSerializable,可是运行后还是如上提示错误。


goolge串行化失败的大多数场景与我的不符合,网上比较多的是一些Integer.class 串行失败的场景,不过后来想了想翻了一下ksoap的包

有一个这个接口类org.ksoap2.serialization.KvmSerializable;


尝试了一下将SceneUserValidateEvt结构体implementsKvmSerializable,并实现了以下4个接口,运行成功OK。

public abstract interface org.ksoap2.serialization.KvmSerializable {    // Method descriptor #4 (I)Ljava/lang/Object;  public abstract java.lang.Object getProperty(int arg0);    // Method descriptor #6 ()I  public abstract int getPropertyCount();    // Method descriptor #8 (ILjava/lang/Object;)V  public abstract void setProperty(int arg0, java.lang.Object arg1);    // Method descriptor #10 (ILjava/util/Hashtable;Lorg/ksoap2/serialization/PropertyInfo;)V  public abstract void getPropertyInfo(int arg0, java.util.Hashtable arg1, org.ksoap2.serialization.PropertyInfo arg2);}

Android客户端能正常访问到Webservice接口了。


更多相关文章

  1. BiliBili-IJKPlayer播放器源码分析(一)
  2. Android(安卓)LCD(二):LCD常用接口原理篇
  3. Activity之间传递对象
  4. Android中main.xml界面参数笔记
  5. Android(安卓)Camera调用流程
  6. Android(安卓)中文API (37) —— AbsoluteLayout
  7. mybatisplus的坑 insert标签insert into select无参数问题的解决
  8. 类和 Json对象
  9. Python技巧匿名函数、回调函数和高阶函数

随机推荐

  1. android browser 的几个小feature (一)
  2. Android(安卓)地区语言和简写对照表
  3. 视频教程-Android Material Design 新控
  4. 不疯狂!非正常!
  5. Android 应用架构组件(Architecture Compo
  6. android studio 使用android:drawableTop
  7. Seekbar thumb滑动时上下显示不全,或者左
  8. Android 之 SystemService
  9. android - 为安全而设计 - 2 - 开发文档
  10. Android中Context详解