服务器端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. Activity之间传递对象
  2. Android中main.xml界面参数笔记
  3. android中LayoutParams设置参数的理解
  4. Android OKhttp 上传文件袋参数
  5. Android接口初了解
  6. Android intent 传递数组对象序列化

随机推荐

  1. Android推送通知指南
  2. 编写android对google地图的调用
  3. 关于android中网络图片下载中oom解决开源
  4. android全平台基于ffmpeg解码本地MP4视频
  5. 自定义View之入门(一)
  6. Android(安卓)Activity生命周期具体内容
  7. android:contentDescription 的用途的用
  8. 64位ubuntu 11.10下android开发环境的搭
  9. Android应用AsyncTask处理机制详解及源码
  10. Android(安卓)手机模拟游戏手柄(USB,C#,wini