在Android开发过程中,不一定都用本地文件系统或本地数据库SQLite,比如QQ,用户的帐号数据都存储远程服务器上。而访问远程数据库有很多种方式,比如HTTPCLIENT,WEBSERVICE,SOCKET等多种方式,即分别为http通信,webservice(Web服务通信),还有socket套接字通信等等,限于篇幅,本文我只讲解讲一下webservice方式。其他方式,在其他的文档在讲。
第一步,在要android中使用web服务,我们得先配置好web服务 器端。我使用了java webservice---XFIRE框架。
相信XFire的优点不用多说,google,百度一下就知道了。我这里主要讲解配置过程。配置一个简单的webservice,相信配置了该webservice。
xfire使用接口和接口实现类来实现远程方法提拱。这样可以将接口公布给客户端,但android提拱了ksoap框架类,一种全新的实现方式,就不需要使用远程接口。只要配置好相关参数和方法即可。
废话不多说了,帖上代码:
这个是接口类,再帖出实现类。
下面我着重讲一下login方法,它里面有两个类提拱方法以实现其功能。
Base64算法相信大家都比较熟悉吧,dt.jar已经提拱了具体的实现细节。你可以查阅相关文档和源码,
这里为了让大家费时费力,我贴上代码。
这段代码可以也可以在Android客户端重用,Android端负责加密码,而XFire服务器端负责解密,这样做是为了安全性着想。
你想想如果不加密码,直接将帐号和密码在网络上传输,裸露在Internet中,那是多么的危险,这是用了通用的Base64加密解密码算法也不一定安全。我只是做一个试笵,大家可以根据自已需要来选用自已的加密码算法。比如md5,SHA等等。
还有就是访问数据库的细节,在这里只用了原始了JDBC,当然可以扩展成Hibernate,iBatis.为求简单原始。帖上如下代码:
不用多说,地球都可以看懂它们。呵呵。
当然要将这个类中的方法发布出去还要有Services.xml文件,这个文件的存储路径为:WebServices目录下。即项目的根目录下面。
代码如下所示:
我为了简单,写只了一个MyService服务。你可以根据自已需要添加其他的服务。
当然运行这个还要有一些JAR包的支持。我附图,如下所示:
布署这个webservice,很简单,就像布署web project一样布署即可。然后运行一下web服务器(tomcat),如下所示:
这样Web service就发布成功了。我们可以看到login方法。
接下来我们看看Android客户端。要使用webservice框架,我们要在classpath中导入D:/学习专题/Android专题/Android例程专题(自定收集)/Android WebService/android/android webservice/ksoap2_android_src.zip。
这样才可以运行webservice
贴上代码:
可以看到Base64又在这里出现了,主要是为了加密码,然后传送给服务器端
注意:private static final String WSDL = "http://10.10.178.70:8888/WSDLApp/services/MyService";
而不要在后面加上?wsdl,如果加上了就错误了。
里面的代码。你可以下载源码进行解读。
我来提一点两种方式获得:result
HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);
//或者AndroidHttpTransport httpTranstation = new AndroidHttpTransport(WSDL);
这两种都可以
然后还有
httpTranstation.call(targetNameSpace + getLogin, envelope);
SoapObject result = (SoapObject ) envelope.bodyIn;//getResponse();
//
str=(String) result.getProperty(0).toString();
// 也可以通过下面方式获得str
// SoapPrimitive result = (SoapPrimitive ) envelope.getResponse();
// str=result.toString();
// 直指value字符串值
这两种方式,我在测试的过程中都通过。提拱多种方式,让程序员灵活使用。
下面我贴上Activity子类MainActivity
最终运行效果如下所示:
有点小问题,可以在开发中更正。
最终不要忘了加 internet permmition
AndroidManifest.xml中加入<uses-permission android:name="android.permission.INTERNET" />