android 连接远程数据库(转)
实现思路:在数据库和android客户端添加一个webservice,处理每次客户端发来的请求。而在android客户端使用ksoap2解析webservice返回的数据。
一 webservice 端,我使用序列化的方式实现的。不知道这里跟xml的实现哪个对手机来说更好。这里先放下,以后研究。
1.我使用的是xfire。新建一个webservice项目,然后我们开始写代码
2.一个接口
Java代码- publicinterfaceICompany{
- publicList<Company>getCompanyList();
- }
3一个实现类
Java代码- publicclassICompanyImpimplementsICompany{
- CompanyDAOcomdao=newCompanyDAO();
- //得到所有公司列表
- publicList<Company>getCompanyList(){
- List<Company>list=newArrayList<Company>();
- try{
- list=comdao.getCompanyList();
- }catch(SQLExceptione){
- e.printStackTrace();
- list=null;
- }
- returnlist;
- }
- }
注意:我这里的返回值是list,不少webservice的基本类型,所以需要为它配置文件 接口+.aegis.xml
4 接口+.aegis.xml
Xml代码- <?xmlversion="1.0"encoding="UTF-8"?>
- <mappings>
- <mapping>
- <!--
- <methodname="getCollectionsRowCount">
- <parameterindex="0"componentType="java.lang.String"/>
- </method>
- -->
- <!--返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分-->
- <methodname="getCompanyList">
- <return-typecomponentType="bean.Company"/>
- </method>
- </mapping>
- </mappings>
5.service.xml
Xml代码- <?xmlversion="1.0"encoding="UTF-8"?>
- <beans>
- <servicexmlns="http://xfire.codehaus.org/config/1.0"
- xmlns:s="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
- <name>MyService</name>
- <serviceClass>main.service.ICompany</serviceClass>
- <implementationClass>main.service.ICompanyImp</implementationClass>
- <stylemce_bogus="1">wrapped</style>
- <use>literal</use>
- <scope>application</scope>
- <namespace>http://android.googlepages.com/</namespace>
- </service>
- </beans>
发布项目后,运行效果如图:
项目结构:
二 android客户端
因为ksoap2解析webservice得到的数据类似于以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽车股份有限公司; id=1; }; }; }
1 解析类:MyWebServiceHelper
Java代码- publicclassMyWebServiceHelper{
- //WSDL文档中的命名空间
- privatestaticfinalStringtargetNameSpace="http://android.googlepages.com/";
- //WSDL文档中的URL
- privatestaticfinalStringWSDL="http://192.168.1.144:8080/oilservice/services/MyService";
- //需要调用的方法名(获得Myervices中的helloWorld方法)
- //需要调用的方法名(获得Myervices中的login方法)
- privatestaticfinalStringgetCompany="getCompanyList";
- publicList<Company>getCompanyList(){
- List<Company>list=newArrayList<Company>();
- SoapObjectrequest=newSoapObject(targetNameSpace,getCompany);
- SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(
- SoapEnvelope.VER11);
- envelope.dotNet=false;
- envelope.setOutputSoapObject(request);
- AndroidHttpTransporthttpTranstation=newAndroidHttpTransport(WSDL);
- try{
- httpTranstation.call(targetNameSpace+getCompany,envelope);
- SoapObjectsoapObject=(SoapObject)envelope.getResponse();
- //如果获取的是个集合,就对它进行下面的操作
- if(soapObject.getName()=="anyType"){
- //遍历WebService获得的集合
- for(inti=0;i<soapObject.getPropertyCount();i++){
- Companym=newCompany();
- //获取单条的数据
- SoapObjectsoapChilds=(SoapObject)soapObject.getProperty(i);
- //对单个的数据进行再次遍历,把它的每行数据读取出来
- m.setId(Integer.parseInt(soapChilds.getProperty("id").toString()));
- m.setCompany(soapChilds.getProperty("company").toString());
- /*
- //获取实体类的所有属性
- Field[]field=m.getClass().getDeclaredFields();
- //遍历所有属性,第一个是序列化的id,serialVersionUID,用不到。
- for(intj=0;j<field.length;j++){
- //获取属性的名字
- Stringname=field[j].getName();
- System.out.println(name);
- }*/
- //}
- list.add(m);
- }
- }
- }catch(IOExceptione){
- e.printStackTrace();
- }catch(XmlPullParserExceptione){
- e.printStackTrace();
- }
- returnlist;
- }
- }
2 实现类:
Java代码- publicclassOilActivityextendsActivity{
- /**Calledwhentheactivityisfirstcreated.*/
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Spinnerspinner=(Spinner)findViewById(R.id.company);
- ArrayAdapter<String>adapter=newArrayAdapter<String>(
- this,android.R.layout.simple_spinner_item);
- adapter.setDropDownViewResource(
- android.R.layout.simple_spinner_dropdown_item);
- //调用自已写的webService
- MyWebServiceHelperwebServiceHelper=newMyWebServiceHelper();
- List<Company>compnayList=webServiceHelper.getCompanyList();
- for(inti=0;i<compnayList.size();i++){
- adapter.add(compnayList.get(i).getCompany());
- }
- spinner.setAdapter(adapter);
- }
- }
3 两个项目中都用到的bean
Java代码- publicclassCompanyimplementsSerializable{
- privatestaticfinallongserialVersionUID=1L;
- privateintid;
- privateStringcompany;
- publicintgetId(){
- returnid;
- }
- publicvoidsetId(intid){
- this.id=id;
- }
- publicStringgetCompany(){
- returncompany;
- }
- publicvoidsetCompany(Stringcompany){
- this.company=company;
- }
- }
最后测试以下,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
- 查看图片附件
更多相关文章
- 浅谈Java中Collections.sort对List排序的两种方法
- python list.sort()根据多个关键字排序的方法实现
- Android编程简单实现拨号器功能的方法
- android 双击屏幕触发事件,放大图片,不用接入借口api,不用OnGestur
- 深入浅出android/ophone UI实现水平布局的Tab控件
- 【Android与iOS开发对比系列】之 回调机制
- Android(安卓)Camera 系统框架分析
- Android(安卓)单元测试和 UI 测试初步实践
- 安卓巴士总结了近百个Android优秀开源项目