Android开发--访问WebSerivice

来源:互联网 发布:mysql的日期和时间函数 编辑:程序博客网 时间:2024/06/05 15:12

今天我来谈谈自己在android开发中,从WebService中获取数据并且解析的经验,希望能帮助到一些刚刚入门学习android开发的朋友们。也希望大家能指正我的不足~~

一、准备阶段,我们需要使用到第三方提供的类库ksoap2,可以自行到百度上搜索下载,我使用的是ksoap2-android-assembly-2.5.7-jar-with-dependencies.jar。下载后,将jar包导入到工程的lib目录下,建议连同api帮助文档一同下载。

二、我们需要在AndroidManifest里添加相应的使用权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>  
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  
<uses-permission android:name="android.permission.INTERNET"/>

三、建议将访问webservice的程序写在子线程中,线程之间的通信就是使用handler/message来传递。

四、我们需要先确定好四个非常重要的字符串内容:

String nameSpace = "http://tempuri.org/"; //webservice里的命名空间,此处用的.net默认命名空间
String methodName = "GetData"; //webservice里的要调用的方法名
String endPoint = "http://192.168.1.109/Service1.asmx";  //webservice的URL ,可以在游览器中直接打开
String soapAction = "http://tempuri.org/GetData";  //命名空间+“/”+方法名

五、准备好四个参数后我们就正式开始编写程序,来获取数据
// 新建HttpTransportSE对象
HttpTransportSE transport=new HttpTransportSE(endPoint);
        try {
        transport.debug=true;
//新建一个envelope(信封)对象,指定版本号VER11
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
      //创建一个soapobject对象
        SoapObject rpc = new SoapObject(nameSpace, methodName); 
        //添加输入的参数("参数名",参数值),要与方法的参数列表相同,顺序最好也一致
rpc.addProperty("name",name);
      envelope.bodyOut = rpc;  
        envelope.dotNet = true; //是否涉及.net
                transport.call(soapAction, envelope);//调用函数  
        if (envelope.getResponse() != null) {  //判断是否有返回值
        SoapObject result = (SoapObject) envelope.bodyIn;  //获取返回内容
                String detail = result.getProperty(0).toString();  //将返回的第一个变量取出
            }  
        }
        catch(Exception e){
         //可自行编写异常处理程序
        }
        finally {
//可自行编写handler程序
}
六、解析数据,在开发工程中,我们获取的数据往往不是一个值,而是由多个值,也可能是多个对象组成的,这些对象以及他们的参数值都通过xml结构化存储,我们需要对xml的数据进行解析。这里就不贴出解析的具体代码。只说明原理:

要想解析数据,我们需要活用SoapObject对象,以及它所提供的getProperty()方法。xml是由许多标签层层嵌套而成,我们可以理解为每一个打标签就是SoapObject对象,获取它的子标签就需要用到getProperty()方法,然后getProperty()方法返回的是Object对象,此时我们只需要将Object对象强转成SoapObject对象即可。


望我的一点点小经验能帮助到看到这边博文的你们,如果有更好的方法希望大家与我分享分享~~



0 0