加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService的用法

发布时间:2020-12-16 23:54:08 所属栏目:安全 来源:网络整理
导读:一、获取并使用KSOAP包 在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService库非常丰富,但这些对Android来说过于庞大。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。 KSOAP2 地

一、获取并使用KSOAP包

在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService库非常丰富,但这些对Android来说过于庞大。适合手机的WebService客户端的SDK有一些,比较常用的是KSOAP2。

KSOAP2 地址:http://code.google.com/p/ksoap2-android/

我下载的最新的是: ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar

注意:

我在使用ksoap2-android时犯了一个低级错误:使用时报错误:The import org.ksoap2 cannot be resolved。
当时分析这个问题时一直以为是Eclipse出了问题,找了好多方法都不行,
实际是我下载的ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar文件是错误的导致的,走了弯路。

http://code.google.com/p/ksoap2-android/wiki/HowToUse?tm=2 页面 通过鼠标右键链接另存为存的是同名的一个纯文本的Html文件。而不是我们想要的。

我是在
http://code.google.com/p/ksoap2-android/source/browse/m2-repo/com/google/code/ksoap2-android/ksoap2-android-assembly/2.5.4/ksoap2-android-assembly-2.5.4-jar-with-dependencies.jar? 点 View raw file 才正确下载对应文件的。

?

?

?

1.WebService只调用方法不传参数的情况:

?

public static String ContactGetTableString(String functionName) {//传入WebService方法名
???// WebService地址
????? final String NAMESPACE = "http://www.yhcc.com.cn";//WebService命名空间
???? // String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarn/service/padDataChangeService?wsdl";
????? String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarncity/service/dataChangeService?wsdl";?
???final String METHOD_NAME = functionName;//调用WebService的方法名
???String SOAP_ACTION = "http://www.yhcc.com.cn/"+functionName;
???String returnString = null;
???try {
????//生成调用Webservice方法的SOAP请求信息
????/**
???? * 创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。
??????????????????????????????????????????????????????? 该版本号需要根据服务端WebService的版本号设置。
??????????????????????????????????????????????????????? 在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,
??????????????????????????????????????????????????????? 该属性的值就是在第一步创建的SoapObject对象。
???? */
????SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME);
????SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
????envelope.bodyOut = rpc;
????envelope.dotNet = true;//注意:如果没有参数,这里设置成true,如果有参数,这里设置成false
????envelope.setOutputSoapObject(rpc);
????
????//创建HttpTransportsSE对象
????HttpTransportSE ht = new HttpTransportSE(URL,10000);

????ht.debug = true;

????//使用call方法调用WebService方法
????ht.call(SOAP_ACTION,envelope);
????
????/**
???? * 获得WebService方法的返回结果

?????????????????????????????????????????????? 有两种方法:

??????????????? 1、使用getResponse方法获得返回数据。

??????????????? private SoapObject detail;
?????????????? detail =(SoapObject) envelope.getResponse();
?????????????
?????????????? 2、使用 bodyIn 及 getProperty。
???????????????? private SoapObject detail;
???????????????? SoapObject result = (SoapObject)envelope.bodyIn;
??????????????? detail = (SoapObject) result.getProperty("getWeatherbyCityNameResult");
???? */
????SoapObject result = (SoapObject)envelope.bodyIn;
????
????//从result中找到return的值,即:return="abd",result.getProperty("return").toString()="abd";
????returnString =? result.getProperty("return").toString();
????
???} catch (Exception e) {
????returnString=ErrorCode.ErrorCode;
????e.printStackTrace();
???}
???return returnString;
??}

?

?

2.有参数的情况下:

public static String ContactGetTableString(String functionName,String AreaNum) {//传入WebService方法名和参数
????? final String NAMESPACE = "http://www.yhcc.com.cn";
????? String URL ="http://"+ServerAndPort.ServerIP+":"+ServerAndPort.ServerPort+"/floodwarncity/service/dataChangeService?wsdl";?
???final String METHOD_NAME = functionName;
???String SOAP_ACTION = "http://www.yhcc.com.cn/"+functionName;
???String returnString = null;
???try {
????
????SoapObject rpc = new SoapObject(NAMESPACE,METHOD_NAME);
????//addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
????rpc.addProperty("arg0",AreaNum);
????
????SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
????envelope.bodyOut = rpc;
????envelope.dotNet = false;//注意:如果没有参数,这里设置成true,如果有参数,这里设置成false
????envelope.setOutputSoapObject(rpc);
????
????HttpTransportSE ht = new HttpTransportSE(URL,10000);

????ht.debug = true;

????ht.call(SOAP_ACTION,envelope);
????
????SoapObject result = (SoapObject)envelope.bodyIn;
????
????returnString =? result.getProperty("return").toString();
????
???} catch (Exception e) {
????returnString=ErrorCode.ErrorCode;
????e.printStackTrace();
???}
???return returnString;
??}

?

?

3.这时候执行会出错,提示没有权限访问网络

需要修改 AndroidManifest.xml 文件,赋予相应权限

简单来说就是增加下面这行配置:<uses-permission android:name="android.permission.INTERNET"></uses-permission>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读