一、获取并使用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出了问题,找了好多方法都不行, 选择我们的项目,右键菜单中 Build Path –> Add External Archives… 增加这个下载的包
增加好后,我们在 选择我们的项目,右键菜单中 Build Path –> Configure Build Path 的 Libraries 中可以看到下面图
二,分以下几步来调用 WebService 1、指定 WebService 的命名空间和调用方法 import org.ksoap2.serialization.SoapObject;private static final String NAMESPACE = "http://WebXml.com.cn/";private static final String METHOD_NAME = "getWeatherbyCityName";SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME); SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。 2、设置调用方法的参数值,如果没有参数,可以省略,设置方法的参数值的代码如下: rpc.addProperty("theCityName", "北京");要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。 3、生成调用Webservice方法的SOAP请求信息。 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);envelope.bodyOut = rpc;envelope.dotNet = true;envelope.setOutputSoapObject(rpc); 创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。 4、创建HttpTransportsSE对象。 这里不要使用 AndroidHttpTransport ht = new AndroidHttpTransport(URL); 这是一个要过期的类 private static String URL = "http://www.webxml.com.cn/webservices/weatherwebservice.asmx";HttpTransportSE ht = new HttpTransportSE(URL); ht.debug = true;5、使用call方法调用WebService方法 private static String SOAP_ACTION = "http://WebXml.com.cn/getWeatherbyCityName";ht.call(SOAP_ACTION, envelope); 网上有人说这里的call的第一个参数为null,但是经过我的测试,null是不行的。 6、获得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");7、 这时候执行会出错,提示没有权限访问网络 需要修改 AndroidManifest.xml 文件,赋予相应权限 简单来说就是增加下面这行配置:<uses-permission android:name="android.permission.INTERNET"></uses-permission> 完整的 AndroidManifest.xml 文件 如下: 注:Android 中在代码中为了调试写了system.out.print()输出项 在菜单:Window-->show view-->other-->找到Android,选择Logcat 是可以看到输出的, 在Filter name 和 By log tag里面均填入System.out,这样的话你就能在单独的界面查看system.out.print()的输出了!! 完整的代码如下: |
Android调用天气预报的WebService简单例子
最新推荐文章于 2022-07-14 11:30:46 发布