android 连接远程数据库
想实现一个功能即让android访问远程数据库,但是网上很多人都不建议直连。据说问题多多。那么中间就加个第三者吧。
实现思路:在数据库和android客户端添加一个webservice,处理每次客户端发来的请求。而在android客户端使用ksoap2解析webservice返回的数据。
一 webservice 端,我使用序列化的方式实现的。不知道这里跟xml的实现哪个对手机来说更好。这里先放下,以后研究。
1.我使用的是xfire。新建一个webservice项目,然后我们开始写代码
2.一个接口
public interface ICompany {public List getCompanyList();}
3一个实现类
public class ICompanyImp implements ICompany {CompanyDAO comdao=new CompanyDAO();//得到所有公司列表public List getCompanyList() {List list=new ArrayList();try {list=comdao.getCompanyList();} catch (SQLException e) {e.printStackTrace();list=null;}return list;}}
注意: 我这里的返回值是list,不少webservice的基本类型,所以需要为它配置文件 接口+.aegis.xml
4 接口+.aegis.xml
<?xml version="1.0" encoding="UTF-8"?>
5.service.xml
<?xml version="1.0" encoding="UTF-8"?>MyService main.service.ICompany main.service.ICompanyImp application http://android.googlepages.com/
发布项目后,运行效果如图:
项目结构:
二 android客户端
因为ksoap2解析webservice得到的数据类似于以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽车股份有限公司; id=1; }; }; }
1 解析类:MyWebServiceHelper
public class MyWebServiceHelper {// WSDL文档中的命名空间 private static final String targetNameSpace = "http://android.googlepages.com/"; // WSDL文档中的URL private static final String WSDL = "http://192.168.1.144:8080/oilservice/services/MyService"; // 需要调用的方法名(获得Myervices中的helloWorld方法) //需要调用的方法名(获得Myervices中的login方法) private static final String getCompany="getCompanyList"; public List getCompanyList( ) { List list=new ArrayList(); SoapObject request =new SoapObject(targetNameSpace,getCompany); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope( SoapEnvelope.VER11); envelope.dotNet = false; envelope.setOutputSoapObject(request); AndroidHttpTransport httpTranstation = new AndroidHttpTransport (WSDL); try { httpTranstation.call(targetNameSpace+getCompany, envelope); SoapObject soapObject = (SoapObject) envelope.getResponse(); //如果获取的是个集合,就对它进行下面的操作 if(soapObject.getName()=="anyType") { //遍历Web Service获得的集合 for(int i=0;i
2 实现类:
public class OilActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Spinner spinner = (Spinner) findViewById(R.id.company); ArrayAdapter adapter = new ArrayAdapter( this,android.R.layout.simple_spinner_item); adapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); //调用自已写的webService MyWebServiceHelper webServiceHelper=new MyWebServiceHelper(); List compnayList= webServiceHelper.getCompanyList(); for(int i=0;i
3 两个项目中都用到的bean
public class Company implements Serializable{private static final long serialVersionUID = 1L;private int id;private String company;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getCompany() {return company;}public void setCompany(String company) {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 初学,愿与大家相互交流。共同进步。
更多相关文章
- 浅谈Java中Collections.sort对List排序的两种方法
- python list.sort()根据多个关键字排序的方法实现
- Android(安卓)studio怎么创建文件? Android(安卓)studio新建Java
- Fuchsia OS 要取代 Android?小论Google Fuchsia OS的通用性
- Android(安卓)LOG机制的实现的详细解读
- https://source.android.com/devices/bluetooth/ - 蓝牙 Android
- 包建强的培训课程(2):Android与设计模式
- Android(安卓)轻松实现语音朗读
- Android(安卓)创建与解析XML(一)—— 概述