Android使用webservice与服务器通讯
2017-06-27 14:06
281 查看
概述:我们在Android移动设备上面,与服务器通讯有很多种方式,其中webservice便是其中一种较方便且易用的方式。服务端只要把webservice接口暴露出来,再配上wsdl文档,客户端就可以很方便的调用了。
WSDL:刚刚讲到wsdl文档,这个其实是服务端再写好webservice接口后,生成的一个在线文档。通过服务端给出的网页地址,你就可以去访问到这个网页文档。它准确地描述了客户端可以调用哪些方法,这些方法的定义,方法需要的参数等非常重要的信息。如下是我们项目的一个wsdl在线文档:
点进去其中一个方法:
Soap:Android调用webservice当然离不开soap框架了。soap其实也是一种协议,它用xml的形式定义了数据该怎样组织和解析。soap框架把底层的一些细节过滤掉,让我们可以很容易在Android端就使用webservice。我们Android端通常使用的ksoap2-android这个第三方的框架,下载地址:http://download.csdn.net/detail/yus201120/9881698
使用:下载好jar包之后导入到项目中,添加应用便可以使用了,下面直接看代码说话:
代码里面的注释已经写得很明白了。下面是几个注意点:
1、操作网络的功能调用,需要放到子线程中执行才行,不然就会报错。
2、目前我在使用ksoap的时候,发现带的参数最好是 字符串类型,不然很容易报错
WSDL:刚刚讲到wsdl文档,这个其实是服务端再写好webservice接口后,生成的一个在线文档。通过服务端给出的网页地址,你就可以去访问到这个网页文档。它准确地描述了客户端可以调用哪些方法,这些方法的定义,方法需要的参数等非常重要的信息。如下是我们项目的一个wsdl在线文档:
点进去其中一个方法:
Soap:Android调用webservice当然离不开soap框架了。soap其实也是一种协议,它用xml的形式定义了数据该怎样组织和解析。soap框架把底层的一些细节过滤掉,让我们可以很容易在Android端就使用webservice。我们Android端通常使用的ksoap2-android这个第三方的框架,下载地址:http://download.csdn.net/detail/yus201120/9881698
使用:下载好jar包之后导入到项目中,添加应用便可以使用了,下面直接看代码说话:
/** * 检查登录信息 * @param param */ public void checkInfo(String mac,String username,String pwd) { // 命名空间 (相当于是soapAction去掉方法名) String nameSpace = "http://nfswit.cc/"; // 调用的方法名称 String methodName = "DeviceLogin"; // EndPoint (其实就是wsdl文档的网址) String endPoint = "http://182.247.238.98:82/WebService1.asmx"; // SOAP Action String soapAction = "http://nfswit.cc/DeviceLogin"; // 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace, methodName); //指定参数 rpc.addProperty("strMAC", mac); rpc.addProperty("strWorkerNo", username); rpc.addProperty("strPwd", pwd); rpc.addProperty("strLoginPosition", "123_587"); rpc.addProperty("strIsManager", "N"); // 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.implicitTypes = true; envelope.bodyOut = rpc; // 设置是否调用的是dotNet开发的WebService envelope.dotNet = true; // 等价于envelope.bodyOut = rpc; envelope.setOutputSoapObject(rpc); HttpTransportSE transport = new HttpTransportSE(endPoint); try { // 调用WebService transport.call(soapAction, envelope); } catch (Exception e) { e.printStackTrace(); } // 获取返回的数据 Object object = envelope.bodyIn; // SoapFault object = (SoapFault) envelope.bodyIn; if(object==null){ Log.i(TAG, "return object is null!"); return; } if(object instanceof SoapFault){ Log.i(TAG, "SoapFault refult is :"+ object.toString()); callback.loginFailed("服务器无法处理请求!"); return; }else if(object instanceof SoapObject){ // 获取返回的结果 Log.i(TAG, "SoapObject refult is :"+ object.toString()); try{ SoapObject result = (SoapObject)object; PropertyInfo info = new PropertyInfo(); result.getPropertyInfo(0, info); String str = result.getProperty(0).toString(); Log.i(TAG, str); JSONObject jsonobj =(JSONObject)JSONValue.parse(str); String code = (String)jsonobj.get("code"); if(code.equals("0")){ //success callback.loginSuccess((String)jsonobj.get("data")); }else{ //failed callback.loginFailed((String)jsonobj.get("data")); callback.loginFailed(code); } }catch(Exception e){ e.printStackTrace(); } } }
代码里面的注释已经写得很明白了。下面是几个注意点:
1、操作网络的功能调用,需要放到子线程中执行才行,不然就会报错。
2、目前我在使用ksoap的时候,发现带的参数最好是 字符串类型,不然很容易报错
相关文章推荐
- Android:服务器访问WebService的使用
- Flex与服务器交互之三(使用WebService组件同服务器WebService通讯)
- android端使用hessian跟服务器通讯
- Android基于客户端和服务器的Socket编程例子之Socket基础通讯--socket模型使用
- Flex与服务器交互之三(使用WebService组件同服务器WebService通讯)
- Android客户端访问使用Jersey开发RESTful的webservice服务器
- android里面怎么使用mina框架与mina服务器连接之传对象
- [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
- [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
- 使用axis2构建webservice时客户端内存不断增长导致应用服务器频繁重启的解决方案
- [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
- 在android中使用SOAP与webservice进行数据交互
- 使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题
- android用ksoap2调用.net的webservice传参数,服务器接收为空的情况
- Android发送SOAP数据给服务器调用webservice,实现手机号归属地查询
- Android 如何使用juv-rtmp-client.jar向Red5服务器发布实时视频数据
- Android使用ksoap2调用C#中的webservice函数方法
- [hessdroid]Android下使用Hessian与Java服务端通讯
- android----发送soap数据给服务器调用webservice,实现手机归属地查询
- android系统中使用ksoap2-android客户端库操作Asp.net WebService