安卓ksoap2获取.net webservice后返回DateSet型的数据的解析方法

来源:互联网 发布:矩阵计算法则 编辑:程序博客网 时间:2024/05/17 23:02

     今天闲来没事,一个朋友让我帮忙看看他的项目,大概业务是这样的:

手机客户端调用.net的webservice后返回dataset类型的视频列表信息,解析信息显示在listview中,然后点击某个视频可以下载到手机SD卡上

dateset类型的信息:

anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType{element=anyType{complexType=anyType{sequence=anyType{element=anyType{}; element=anyType{}; element=anyType{}; }; }; }; }; }; }; }; diffgram=anyType{NewDataSet=anyType{Table=anyType{Course_CfName=格兰仕的秘密01.flv; Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密01_200K.flv; cf_id=24267; }; Table=anyType{Course_CfName=格兰仕的秘密02.flv; Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密02_200K.flv; cf_id=24268; }; Table=anyType{Course_CfName=格兰仕的秘密03.flv; Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密03_200K.flv; cf_id=24269; }; Table=anyType{Course_CfName=格兰仕的秘密04.flv; Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密04_200K.flv; cf_id=24270; }; Table=anyType{Course_CfName=格兰仕的秘密05.flv; Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密05_200K.flv; cf_id=24271; }; Table=anyType{Course_CfName=走进蒙牛与牛根生面对面_01.flv; Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_01.flv; cf_id=24301; }; Table=anyType{Course_CfName=走进蒙牛与牛根生面对面_02.flv; Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_02.flv; cf_id=24302; }; }; }; }

      相信调用webservice获取服务器信息就不用给大家介绍了吧,一般没有什么难度,只要URL,NAMESPACE,METHOD和需要的参数正确,基本上都可以正常获取到信息,一般我们获取到的都是xml类型的和json类型的,这种类型解析的方法很多,也很普遍,相信网上一查一大堆,但是像我们获取到的这种dataset类型的数据,既不是xml,也不是json,那么该怎么去解析呢,下面就请看代码:

一、封装视频信息的类

film.java

public class Film {/* * Course_CfName=格兰仕的秘密01.flv;  *  Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密01_200K.flv;  *  cf_id=24267;  */private String Course_CfName;private String Course_Updir;private String cf_id;public String getCourse_CfName() {return Course_CfName;}public void setCourse_CfName(String courseCfName) {Course_CfName = courseCfName;}public String getCourse_Updir() {return Course_Updir;}public void setCourse_Updir(String courseUpdir) {Course_Updir = courseUpdir;}public String getCf_id() {return cf_id;}public void setCf_id(String cfId) {cf_id = cfId;}}

GetVideoInfoService.java
二、从服务器获取数据并解析封装(重点)

public class GetVideoInfoService {private static final String NAMESPACE ="http://????.org/"; // WebService地址 private static String URL ="http://????.????.????/androidphone/login.asmx?wsdl"; private static final String METHOD_NAME ="getVoides"; private static String SOAP_ACTION ="http://????.org/getVoides";private List<Film> films=new ArrayList<Film>();public List<Film> getVoidesInfo(String uname) {try { //(1) 指定webservice的命名空间和调用的方法名SoapObject rpc =new SoapObject(NAMESPACE, METHOD_NAME); //(2) 设置调用方法的参数值,如果没有参数,可以省略,rpc.addProperty("userName", uname);//3 创建HttpTransportsSE对象。AndroidHttpTransport ht =new AndroidHttpTransport(URL); ht.debug =true; //4 生成调用Webservice方法的SOAP请求信息,//在创建SoapSerializationEnvelope对象后,//不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,//该属性的值就是在第一步创建的SoapObject对象SoapSerializationEnvelope envelope =new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; envelope.dotNet =true; envelope.setOutputSoapObject(rpc); //(5)使用call方法调用WebService方法ht.call(SOAP_ACTION, envelope); //SoapObject result = (SoapObject) envelope.bodyIn; //Object detail=result.getProperty("getVoidesResult");if (envelope.getResponse() != null) {SoapObject soapObject = (SoapObject) envelope.bodyIn;SoapObject soap1 = (SoapObject) soapObject.getProperty("getVoidesResult");/** * 此时的获取到的信息是: * anyType{schema=anyType{element=anyType{complexType=anyType{choice=anyType * {element=anyType{complexType=anyType{sequence=anyType{element=anyType{};  * element=anyType{}; element=anyType{}; }; }; }; }; }; }; };  * diffgram=anyType{NewDataSet=anyType{ * Table=anyType{ * Course_CfName=格兰仕的秘密01.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密01_200K.flv; * cf_id=24267; };  * Table=anyType{ * Course_CfName=格兰仕的秘密02.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密02_200K.flv;  * cf_id=24268; };  * Table=anyType{ * Course_CfName=格兰仕的秘密03.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密03_200K.flv;  * cf_id=24269; };  * Table=anyType{ * Course_CfName=格兰仕的秘密04.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密04_200K.flv;  * cf_id=24270; }; * Table=anyType{ * Course_CfName=格兰仕的秘密05.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密05_200K.flv;  * cf_id=24271; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_01.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_01.flv;  * cf_id=24301; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_02.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_02.flv;  * cf_id=24302; }; }; }; } */SoapObject soapChilds =(SoapObject)soap1.getProperty(1);/**因为0位置对我们来说没有数据,所以我们去1位置的信息 * anyType{NewDataSet=anyType{ * Table=anyType{ * Course_CfName=格兰仕的秘密01.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密01_200K.flv; * cf_id=24267; };  * Table=anyType{ * Course_CfName=格兰仕的秘密02.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密02_200K.flv;  * cf_id=24268; };  * Table=anyType{ * Course_CfName=格兰仕的秘密03.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密03_200K.flv;  * cf_id=24269; };  * Table=anyType{ * Course_CfName=格兰仕的秘密04.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密04_200K.flv;  * cf_id=24270; }; * Table=anyType{ * Course_CfName=格兰仕的秘密05.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密05_200K.flv;  * cf_id=24271; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_01.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_01.flv;  * cf_id=24301; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_02.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_02.flv;  * cf_id=24302; }; }; }; }  */SoapObject soap2=(SoapObject)soapChilds.getProperty(0);/**去掉了前面的部分anyType{NewDataSet= * anyType{ * Table=anyType{ * Course_CfName=格兰仕的秘密01.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密01_200K.flv; * cf_id=24267; };  * Table=anyType{ * Course_CfName=格兰仕的秘密02.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密02_200K.flv;  * cf_id=24268; };  * Table=anyType{ * Course_CfName=格兰仕的秘密03.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密03_200K.flv;  * cf_id=24269; };  * Table=anyType{ * Course_CfName=格兰仕的秘密04.flv;  * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密04_200K.flv;  * cf_id=24270; }; * Table=anyType{ * Course_CfName=格兰仕的秘密05.flv; * Course_Updir=webupload/整理课件/2012年5月/格兰仕的秘密\200K\格兰仕的秘密05_200K.flv;  * cf_id=24271; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_01.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_01.flv;  * cf_id=24301; };  * Table=anyType{ * Course_CfName=走进蒙牛与牛根生面对面_02.flv;  * Course_Updir=webupload/整理课件/2012年5月/走进蒙牛 与牛根生面对面\200K\走进蒙牛与牛根生面对面_02.flv;  * cf_id=24302; }; }; }; }  */if(films.size()>0){films.clear();}/** * 里面有7个视频,所以需要我们遍历取出 */for(int i=0;i<soap2.getPropertyCount();i++){SoapObject soap3=(SoapObject) soap2.getProperty(i);//取出每个视频信息Film film=new Film();film.setCourse_CfName(soap3.getProperty("Course_CfName").toString());film.setCourse_Updir("????.????.com/"+soap3.getProperty("Course_Updir").toString());film.setCf_id(soap3.getProperty("cf_id").toString());films.add(film);//封装后存入集合中 }}} catch (Exception e) {e.printStackTrace();}return films;}


三,新建个activity,调用webservice中的方法并遍历显示

 

GetVideoInfoService videoService=new GetVideoInfoService();       List<Film> list=videoService.getVoidesInfo("test");       for(Film film:list){       System.out.println("视频名称:"+film.getCourse_CfName());       System.out.println("视频路径:"+film.getCourse_Updir());       System.out.println("视频编号:"+film.getCf_id());       System.out.println("==============================================");       }

运行结果:




 转载请注明出处