想实现一个功能即让android访问远程数据库,但是网上很多人都不建议直连。据说问题多多。那么中间就加个第三者吧。
实现思路:在数据库和Android客户端添加一个webservice,处理每次客户端发来的请求。而在android客户端使用ksoap2解析webservice返回的数据。
一 webservice 端,我使用序列化的方式实现的。不知道这里跟xml的实现哪个对手机来说更好。这里先放下,以后研究。
1我使用的是xfire。新建一个webservice项目,然后我们开始写代码
2一个接口
Java代码
public interface ICompany {
public List<Company> getCompanyList();
}
3一个实现类
Java代码
public class ICompanyImp implements ICompany {
CompanyDAO comdao=new CompanyDAO();
//得到所有公司列表
public List<Company> getCompanyList() {
List<Company> list=new ArrayList<Company>();
try {
list=comdaogetCompanyList();
} catch (SQLException e) {
eprintStackTrace();
list=null;
}
return list;
}
}
注意: 我这里的返回值是list,不少webservice的基本类型,所以需要为它配置文件 接口+aegisxml
4 接口+aegisxml
Xml代码
<xml version="10" encoding="UTF-8">
<mappings>
<mapping>
<!--
<method name="getCollectionsRowCount">
<parameter index="0" componentType="javalangString"/>
</method>
-->
<!-- 返回的类型是Map的话,做法和List一样。但定义的类型,是Map中的Value部分 -->
<method name="getCompanyList">
<return-type componentType="beanCompany"/>
</method>
</mapping>
</mappings>
5servicexml
Xml代码
<xml version="10" encoding="UTF-8">
<beans >
<service xmlns="http://xfirecodehausorg/config/10"
xmlns:s="http://wwwspringframeworkorg/schema/beans"
xmlns:xsi="http://wwww3org/2001/XMLSchema-instance"
xsi:schemaLocation="http://wwwspringframeworkorg/schema/beans
http://wwwspringframeworkorg/schema/beans/spring-beans-25xsd">
<name>MyService</name>
<serviceClass>mainserviceICompany</serviceClass>
<implementationClass>mainserviceICompanyImp</implementationClass>
<style mce_bogus="1">wrapped</style>
<use>literal</use>
<scope>application</scope>
<namespace>http://androidgooglepagescom/</namespace>
</service>
</beans>
发布项目后,运行效果如图:
项目结构:
二 android客户端
因为ksoap2解析webservice得到的数据类似于以下:getCompanyListResponse{out=anyType{Company=anyType{company=安徽江淮汽车股份有限公司; id=1; }; }; }
1 解析类:MyWebServiceHelper
Java代码
public class MyWebServiceHelper {
// WSDL文档中的命名空间
private static final String targetNameSpace = "http://androidgooglepagescom/";
// WSDL文档中的URL
private static final String WSDL = "http://1921681144:8080/oilservice/services/MyService";
// 需要调用的方法名(获得Myervices中的helloWorld方法)
//需要调用的方法名(获得Myervices中的login方法)
private static final String getCompany="getCompanyList";
public List<Company> getCompanyList( ) {
List<Company> list=new ArrayList<Company>();
SoapObject request =new SoapObject(targetNameSpace,getCompany);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelopeVER11);
envelopedotNet = false;
envelopesetOutputSoapObject(request);
AndroidHttpTransport httpTranstation = new AndroidHttpTransport (WSDL);
try {
httpTranstationcall(targetNameSpace+getCompany, envelope);
SoapObject soapObject = (SoapObject) envelopegetResponse();
//如果获取的是个集合,就对它进行下面的 *** 作
if(soapObjectgetName()=="anyType") {
//遍历Web Service获得的集合
for(int i=0;i<soapObjectgetPropertyCount();i++){
Company m=new Company();
//获取单条的数据
SoapObject soapChilds =(SoapObject)soapObjectgetProperty(i);
//对单个的数据进行再次遍历,把它的每行数据读取出来
msetId(IntegerparseInt(soapChildsgetProperty("id")toString()));
msetCompany(soapChildsgetProperty("company")toString());
/
//获取实体类的所有属性
Field[] field = mgetClass()getDeclaredFields();
//遍历所有属性,第一个是序列化的id,serialVersionUID,用不到。
for(int j=0 ; j<fieldlength ; j++){
//获取属性的名字
String name = field[j]getName();
Systemoutprintln(name);
}/
// }
listadd(m);
}
}
} catch (IOException e) {
eprintStackTrace();
} catch (XmlPullParserException e) {
eprintStackTrace();
}
return list;
}
}
2 实现类:
Java代码
public class OilActivity extends Activity {
/ Called when the activity is first created /
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
setContentView(Rlayoutmain);
Spinner spinner = (Spinner) findViewById(Ridcompany);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,androidRlayoutsimple_spinner_item);
adaptersetDropDownViewResource(
androidRlayoutsimple_spinner_dropdown_item);
//调用自已写的webService
MyWebServiceHelper webServiceHelper=new MyWebServiceHelper();
List<Company> compnayList= webServiceHelpergetCompanyList();
for(int i=0;i<compnayListsize();i++){
adapteradd(compnayListget(i)getCompany());
}
spinnersetAdapter(adapter);
}
}
3 两个项目中都用到的bean
Java代码
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) {
thisid = id;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
thiscompany = company;
}
}
最后测试以下,list返回正确。效果图:
3项目结构:
参考文章:
http://ksoap2sourceforgenet/doc/api/ ksoap2的API
http://topiccsdnnet/u/20110412/16/0341626d-8576-4dda-b9e4-aab3ff50c980html 关于list处理的帖子
http://blogcsdnnet/haha_mingg/article/details/6338332,总的思路的实现。在此感谢作者的无私奉献
android 初学,愿与大家相互交流。共同进步。
以上就是关于Android 怎么连接远程数据库全部的内容,包括:Android 怎么连接远程数据库、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)