今天闲来没事,一个朋友让我帮忙看看他的项目,大概业务是这样的:
手机客户端调用.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 films=new ArrayList();
public List 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
三,新建个activity,调用webservice中的方法并遍历显示
GetVideoInfoService videoService=new GetVideoInfoService();
List 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("==============================================");
}
运行结果: