现在的位置: 首页 > 综合 > 正文

android与数据库交互,传递实体类

2013年09月13日 ⁄ 综合 ⁄ 共 3641字 ⁄ 字号 评论关闭

实现Android与服务器端数据交互,我们在PC机器java客户端中,需要一些库,比如XFire,Axis2,CXF等等来支持访问WebService,但是这些库并不适合我们资源有限的android手机客户端,做过JAVA ME的人都知道有KSOAP这个第三方的类库,可以帮助我们获取服务器端webService调用,当然KSOAP已经提供了基于android版本的jar包了,那么我们就开始吧:

首先下载KSOAP包:

  1. ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar 

然后新建android项目:并把下载的KSOAP包放在android项目的lib目录下:右键->build path->configure build path--选择Libraries,如图:

以下分为七个步骤来调用WebService方法:

1、实例化SoapObject 对象,指定webService的命名空间(从相关WSDL文档中可以查看命名空间),以及调用方法名称。如:

  1. //命名空间        
  2.   private static final String serviceNameSpace="http://WebXml.com.cn/";      
  3. //调用方法(获得支持的城市)       
  4.   private static final String getSupportCity="getSupportCity";    
  5. //实例化SoapObject对象           
  6.   SoapObject request=new SoapObject(serviceNameSpace, getSupportCity);  

2、假设方法有参数的话,设置调用方法参数

  1. request.addProperty("参数名称","参数值"); 

3、设置SOAP请求信息(参数部分为SOAP协议版本号,与你要调用的webService中版本号一致):

  1. //获得序列化的Envelope         
  2.     SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);  
  3.     envelope.bodyOut=request

4、注册Envelope,

  1. (new MarshalBase64()).register(envelope); 

5、构建传输对象,并指明WSDL文档URL:

  1. //请求URL     
  2.     private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";  
  3. //Android传输对象          
  4.        AndroidHttpTransport transport=new  AndroidHttpTransport(serviceURL);  
  5.       transport.debug=true

6、调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):

  1. transport.call(serviceNameSpace+getWeatherbyCityName, envelope); 

7、解析返回数据:

  1. if(envelope.getResponse()!=null){  
  2.         return parse(envelope.bodyIn.toString());  
  3.    }  
  4. /**************   
  5. * 解析XML      
  6.  * @param str   
  7. * @return  
  8. */      
  9. private static List<String> parse(String str){   
  10.    String temp;          
  11.    List<String> list=new ArrayList<String>();  
  12.    if(str!=null && str.length()>0){   
  13.       int start=str.indexOf("string");  
  14.       int end=str.lastIndexOf(";");   
  15.       temp=str.substring(start, end-3);   
  16.       String []test=temp.split(";");   
  17.   for(int i=0;i<test.length;i++){   
  18.     if(i==0){   
  19.     temp=test[i].substring(7);   
  20.    }else{  
  21.      temp=test[i].substring(8);   
  22.    }  
  23.      int index=temp.indexOf(",");  
  24.      list.add(temp.substring(0, index));  
  25.    }  
  26.  }    
  27.      return list;  

这样就成功啦。那么现在我们就来测试下吧,这里有个地址提供webService天气预报的服务的,我这里只提供获取城市列表:

  1. //命名空间     
  2.  private static final String serviceNameSpace="http://WebXml.com.cn/";      
  3. //请求URL      
  4. private static final String serviceURL="http://www.webxml.com.cn/webservices/weatherwebservice.asmx";      
  5. //调用方法(获得支持的城市)      
  6. private static final String getSupportCity="getSupportCity";      
  7. //调用城市的方法(需要带参数)     
  8.  private static final String getWeatherbyCityName="getWeatherbyCityName";      
  9. //调用省或者直辖市的方法(获得支持的省份或直辖市)      
  10. private static final String getSupportProvince="getSupportProvince"

我们选择获取国内外主要城市或者省份的方法吧:getSupportProvice,然后调用,你会发现浏览器返回给我们的是xml文档:

  1. <?xml version="1.0" encoding="utf-8" ?> 
  2. <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3. xmlns:xsd="http://www.w3.org/2001/XMLSchema"   
  4. xmlns="http://WebXml.com.cn/">    
  5. <string>直辖市</string>     
  6. <string>特别行政区</string>     
  7. <string>黑龙江</string>     
  8. <string>吉林</string>     
  9. <string>辽宁</string>    
  10. <string>内蒙古</string>     
  11. <string>河北</string>     
  12. <string>河南</string>     
  13. <string>山东</string>     
  14. <string>山西</string>     
  15. <string>江苏</string>     
  16. <string>安徽</string>     
  17. <string>陕西</string>     
  18. <string>宁夏</string>     
  19. <string>甘肃</string>     
  20. <string>青海</string>     
  21. <string>湖北</string>     
  22. <string>湖南</string>     
  23. <string>浙江</string>     
  24. <string>江西</string>     
  25. <string>福建</string>     
  26. <string>贵州</string>     
  27. <string>四川</string>     
  28. <string>广东</string>     
  29. <string>广西</string>    
  30. <string>云南</string>     
  31. <string>海南</string>     
  32. <string>新疆</string>     
  33. <string>西藏</string>     
  34. <string>台湾</string>     
  35. <string>亚洲</string>     
  36. <string>欧洲</

抱歉!评论已关闭.