1. 程式人生 > >安卓ksoap2獲取.net webservice後返回DateSet型的資料的解析方法

安卓ksoap2獲取.net webservice後返回DateSet型的資料的解析方法

     今天閒來沒事,一個朋友讓我幫忙看看他的專案,大概業務是這樣的:

手機客戶端呼叫.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("==============================================");
       }

執行結果:




 轉載請註明出處