想实现一个功能即让android访问远程数据库,但是网上很多人都不建议直连。据说问题多多。那么中间就加个第三者吧。

实现思路:在数据库和android客户端添加一个webservice,处理每次客户端发来的请求。而在android客户端使用ksoap2解析webservice返回的数据。

一 webservice 端,我使用序列化的方式实现的。不知道这里跟xml的实现哪个对手机来说更好。这里先放下,以后研究。

1.我使用的是xfire。新建一个webservice项目,然后我们开始写代码

2.一个接口

Java代码
  1. publicinterfaceICompany{
  2. publicList<Company>getCompanyList();
  3. }

3一个实现类

Java代码
  1. publicclassICompanyImpimplementsICompany{
  2. CompanyDAOcomdao=newCompanyDAO();
  3. //得到所有公司列表
  4. publicList<Company>getCompanyList(){
  5. List<Company>list=newArrayList<Company>();
  6. try{
  7. list=comdao.getCompanyList();
  8. }catch(SQLExceptione){
  9. e.printStackTrace();
  10. list=null;
  11. }
  12. returnlist;
  13. }
  14. }

注意:我这里的返回值是list,不少webservice的基本类型,所以需要为它配置文件 接口+.aegis.xml

4 接口+.aegis.xml

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <mappings>
  3. <mapping>
  4. <!--
  5. <methodname="getCollectionsRowCount">
  6. <parameterindex="0"componentType="java.lang.String"/>
  7. </method>
  8. -->
  9. <!--返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分-->
  10. <methodname="getCompanyList">
  11. <return-typecomponentType="bean.Company"/>
  12. </method>
  13. </mapping>
  14. </mappings>

5.service.xml

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beans>
  3. <servicexmlns="http://xfire.codehaus.org/config/1.0"
  4. xmlns:s="http://www.springframework.org/schema/beans"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
  8. <name>MyService</name>
  9. <serviceClass>main.service.ICompany</serviceClass>
  10. <implementationClass>main.service.ICompanyImp</implementationClass>
  11. <stylemce_bogus="1">wrapped</style>
  12. <use>literal</use>
  13. <scope>application</scope>
  14. <namespace>http://android.googlepages.com/</namespace>
  15. </service>
  16. </beans>

发布项目后,运行效果如图:





项目结构:





二 android客户端


因为ksoap2解析webservice得到的数据类似于以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽车股份有限公司; id=1; }; }; }

1 解析类:MyWebServiceHelper

Java代码
  1. publicclassMyWebServiceHelper{
  2. //WSDL文档中的命名空间
  3. privatestaticfinalStringtargetNameSpace="http://android.googlepages.com/";
  4. //WSDL文档中的URL
  5. privatestaticfinalStringWSDL="http://192.168.1.144:8080/oilservice/services/MyService";
  6. //需要调用的方法名(获得Myervices中的helloWorld方法)
  7. //需要调用的方法名(获得Myervices中的login方法)
  8. privatestaticfinalStringgetCompany="getCompanyList";
  9. publicList<Company>getCompanyList(){
  10. List<Company>list=newArrayList<Company>();
  11. SoapObjectrequest=newSoapObject(targetNameSpace,getCompany);
  12. SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
  13. SoapEnvelope.VER11);
  14. envelope.dotNet=false;
  15. envelope.setOutputSoapObject(request);
  16. AndroidHttpTransporthttpTranstation=newAndroidHttpTransport(WSDL);
  17. try{
  18. httpTranstation.call(targetNameSpace+getCompany,envelope);
  19. SoapObjectsoapObject=(SoapObject)envelope.getResponse();
  20. //如果获取的是个集合,就对它进行下面的操作
  21. if(soapObject.getName()=="anyType"){
  22. //遍历WebService获得的集合
  23. for(inti=0;i<soapObject.getPropertyCount();i++){
  24. Companym=newCompany();
  25. //获取单条的数据
  26. SoapObjectsoapChilds=(SoapObject)soapObject.getProperty(i);
  27. //对单个的数据进行再次遍历,把它的每行数据读取出来
  28. m.setId(Integer.parseInt(soapChilds.getProperty("id").toString()));
  29. m.setCompany(soapChilds.getProperty("company").toString());
  30. /*
  31. //获取实体类的所有属性
  32. Field[]field=m.getClass().getDeclaredFields();
  33. //遍历所有属性,第一个是序列化的id,serialVersionUID,用不到。
  34. for(intj=0;j<field.length;j++){
  35. //获取属性的名字
  36. Stringname=field[j].getName();
  37. System.out.println(name);
  38. }*/
  39. //}
  40. list.add(m);
  41. }
  42. }
  43. }catch(IOExceptione){
  44. e.printStackTrace();
  45. }catch(XmlPullParserExceptione){
  46. e.printStackTrace();
  47. }
  48. returnlist;
  49. }
  50. }

2 实现类:

Java代码
  1. publicclassOilActivityextendsActivity{
  2. /**Calledwhentheactivityisfirstcreated.*/
  3. @Override
  4. publicvoidonCreate(BundlesavedInstanceState){
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. Spinnerspinner=(Spinner)findViewById(R.id.company);
  8. ArrayAdapter<String>adapter=newArrayAdapter<String>(
  9. this,android.R.layout.simple_spinner_item);
  10. adapter.setDropDownViewResource(
  11. android.R.layout.simple_spinner_dropdown_item);
  12. //调用自已写的webService
  13. MyWebServiceHelperwebServiceHelper=newMyWebServiceHelper();
  14. List<Company>compnayList=webServiceHelper.getCompanyList();
  15. for(inti=0;i<compnayList.size();i++){
  16. adapter.add(compnayList.get(i).getCompany());
  17. }
  18. spinner.setAdapter(adapter);
  19. }
  20. }

3 两个项目中都用到的bean

Java代码
  1. publicclassCompanyimplementsSerializable{
  2. privatestaticfinallongserialVersionUID=1L;
  3. privateintid;
  4. privateStringcompany;
  5. publicintgetId(){
  6. returnid;
  7. }
  8. publicvoidsetId(intid){
  9. this.id=id;
  10. }
  11. publicStringgetCompany(){
  12. returncompany;
  13. }
  14. publicvoidsetCompany(Stringcompany){
  15. this.company=company;
  16. }
  17. }

最后测试以下,list返回正确。效果图:



3项目结构:



参考文章:

http://ksoap2.sourceforge.net/doc/api/ksoap2的API

http://topic.csdn.net/u/20110412/16/0341626d-8576-4dda-b9e4-aab3ff50c980.html关于list处理的帖子

http://blog.csdn.net/haha_mingg/article/details/6338332,总的思路的实现。在此感谢作者的无私奉献

android 初学,愿与大家相互交流。共同进步。

  • oilservice.rar (672.9 KB)
  • 下载次数: 15
  • oil.rar (173.8 KB)
  • 下载次数: 13
  • 查看图片附件

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. Android编程简单实现拨号器功能的方法
  4. android 双击屏幕触发事件,放大图片,不用接入借口api,不用OnGestur
  5. 深入浅出android/ophone UI实现水平布局的Tab控件
  6. 【Android与iOS开发对比系列】之 回调机制
  7. Android(安卓)Camera 系统框架分析
  8. Android(安卓)单元测试和 UI 测试初步实践
  9. 安卓巴士总结了近百个Android优秀开源项目

随机推荐

  1. android HTTP post方法时,如何使用cookies
  2. android 项目收获01
  3. Android(安卓)App第一次启动或者更新或第
  4. [Android]Generating Keys
  5. Android将Uri转化为文件路径的方法
  6. Android(安卓)Question - “Id cannot be
  7. Android的字符编码转换问题,Unicode,GB2312
  8. Android(安卓)圆角图片 圆形图片
  9. Android(安卓)– Multithreading in a UI
  10. Android(安卓)调用系统播放器