冰楓論壇

標題: (分享)Android(Ksoap2)調用Service(可傳遞自訂物件) [打印本頁]

作者: KinKALaw    時間: 2017-3-5 09:11
標題: (分享)Android(Ksoap2)調用Service(可傳遞自訂物件)
本帖最後由 KinKALaw 於 2017-3-5 10:56 編輯

1.參數準備

0235.jpg

URL : 伺服器ws地址,要去掉?wsdl,並且儘量用功能變數名稱不要用IP
NAMESPACE : wstargetNamespace="http://impl.webservice.cbst.ffcs.com/"
METHOD_NAME : 需要調用的方法,該例中調用遠端usersCertificate方法

2.代碼部分
  1. HttpTransportSE transport = new HttpTransportSE(URL);
  2. SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);

  3. //需要發送的物件需要做序列化
  4. //創建使用者認證物件
  5. UserCertificate uc = new UserCertificate();
  6. uc.setParamType(Constant.USERCERTIFICATE_USERACCOUNT);
  7. uc.setParamValue(user);
  8. md5 md = new md5();
  9. String md5Pwd = md.md5s(pwd);
  10. uc.setPassword(md5Pwd);
  11. uc.setQueryParams("userAccount,userArea,userName,mobileTelephone,carNumber,email,besttoneCard,idCard,isCertificate,PROPERTY|address");

  12. //通過getDemoWsRequest()方法獲得WsRequest物件
  13. WSRequest ws = getDemoWSRequest();
  14. //設置param
  15. ws.getParam().setUserCertificate(uc);
  16. //設置TransactionName,一般為方法名
  17. ws.setTransactionName(METHOD_NAME);

  18. //將ws放入pi對象
  19. PropertyInfo pi = new PropertyInfo();
  20. //name為伺服器端需要調用的方法參數名稱
  21. pi.setName("request");
  22. pi.setValue(ws);
  23. pi.setType(ws.getClass());
  24. soapObject.addProperty(pi);

  25. //做類型映射
  26. //發送時對象不指定類型,envelope.implicitTypes = true;
  27. envelope.addMapping(NAMESPACE, "WsRequest", ws.getClass());
  28. envelope.addMapping(NAMESPACE, "Param", Param.class);
  29. envelope.addMapping(NAMESPACE, "UserCertificate", UserCertificate.class);
  30. //指定xml版本,以及request中body
  31. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  32.                                         SoapEnvelope.VER10);
  33. envelope.bodyOut = transport;
  34. envelope.setOutputSoapObject(soapObject);

  35. //發送request
  36. transport.call(null, envelope);

  37. SoapObject sb = (SoapObject) envelope.bodyIn;
  38. Object response = envelope.getResponse();
複製代碼
3.序列化需要傳送的物件
注:需要產生實體的物件要實現KvmSerializable介面,並且實現該幾口方法
  1. public class WSRequest implements KvmSerializable {
  2.         private String transactionName;
  3.         private Header header;
  4.         private IdentityInfo identityInfo;
  5.         private ScrollingInfo scrollingInfo;
  6.         private Param param;

  7.         public Header getHeader() {
  8.                 return header;
  9.         }

  10.         public void setHeader(Header header) {
  11.                 this.header = header;
  12.         }

  13.         public IdentityInfo getIdentityInfo() {
  14.                 return identityInfo;
  15.         }

  16.         public void setIdentityInfo(IdentityInfo identityInfo) {
  17.                 this.identityInfo = identityInfo;
  18.         }

  19.         public Param getParam() {
  20.                 return param;
  21.         }

  22.         public void setParam(Param param) {
  23.                 this.param = param;
  24.         }

  25.         public ScrollingInfo getScrollingInfo() {
  26.                 return scrollingInfo;
  27.         }

  28.         public void setScrollingInfo(ScrollingInfo scrollingInfo) {
  29.                 this.scrollingInfo = scrollingInfo;
  30.         }

  31.         public String getTransactionName() {
  32.                 return transactionName;
  33.         }

  34.         public void setTransactionName(String transactionName) {
  35.                 this.transactionName = transactionName;
  36.         }

  37.         @Override
  38.         public Object getProperty(int arg0) {
  39.                 switch (arg0) {
  40.                 case 0:
  41.                         return transactionName;
  42.                 case 1:
  43.                         return header;
  44.                 case 2:
  45.                         return identityInfo;
  46.                 case 3:
  47.                         return scrollingInfo;
  48.                 case 4:
  49.                         return param;
  50.                 }
  51.                 return null;
  52.         }

  53.         @Override
  54.         public int getPropertyCount() {
  55.                 // TODO Auto-generated method stub
  56.                 return 5;
  57.         }

  58.         @Override
  59.         public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
  60.                 switch (arg0) {
  61.                 case 0:
  62.                         arg2.type = PropertyInfo.STRING_CLASS;
  63.                         arg2.name = "transactionName";
  64.                         break;
  65.                 case 1:
  66.                         arg2.type = header.getClass();
  67.                         arg2.name = "header";
  68.                         break;
  69.                 case 2:
  70.                         arg2.type = identityInfo.getClass();
  71.                         arg2.name = "identityInfo";
  72.                         break;
  73.                 case 3:
  74.                         arg2.type = scrollingInfo.getClass();
  75.                         arg2.name = "ScrollingInfo";
  76.                         break;
  77.                 case 4:
  78.                         arg2.type = param.getClass();
  79.                         arg2.name = "param";
  80.                         break;
  81.                 default:
  82.                         break;
  83.                 }
  84.         }

  85.         @Override
  86.         public void setProperty(int arg0, Object arg1) {
  87.                 switch (arg0) {
  88.                 case 0:
  89.                         transactionName = arg1.toString();
  90.                         break;
  91.                 case 1:
  92.                         header = (Header) arg1;
  93.                         break;
  94.                 case 2:
  95.                         identityInfo = (IdentityInfo) arg1;
  96.                         break;
  97.                 case 3:
  98.                         scrollingInfo = (ScrollingInfo) arg1;
  99.                         break;
  100.                 case 4:
  101.                         param = (Param) arg1;
  102.                         break;
  103.                 default:
  104.                         break;
  105.                 }
  106.         }
  107. }
複製代碼
http://www.cnblogs.com/zhangchaoyang/articles/1955834.html詳細可參考該博客
       http://ksoap2.sourceforge.net/doc/api/Ksoap API
http://www.cnasm.com/view.asp?classid=49&newsid=320 可以用這個軟體調試






歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓