WebService 安卓客户端调用和服务器端搭建

时间:2022-04-23 13:43:14

这段时间做了一个小程序,想通过WebService来供安卓客户端调用。先说一下安卓端的程序。之前没有进行过安卓+Java的编程,就先找网上的一个查询手机号码归属地例子来测试WebService。

在Android平台调用Web Service需要依赖于第三方类库ksoap2,它是一个SOAP Web service客户端开发包,主要用于资源受限制的Java环境。在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 android。KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包。

客户端编程的时候参考了后面的博客链接博客,文章非常详细,按照文中给出的步骤和代码,很快编译通过,不过运行的时候点击了查询按钮之后,程序会退出。打开文中给出的网址,网页上贴着通知,网址搬迁并且给付费用户提供服务并且不再提供安卓端支持。换了另外几个网址提供的WebService接口,还是一样退出。之后调试时发现,当安卓端程序试图访问对方的WebService接口时,会捕捉到SoapFault,查看logcat打印的信息,“SoapFault - faultcode…“后面一长串错误信息,比如缺少传递的参数等等。

后来开始怀疑服务器是否能提供免费的接口,幸好小组成员有同时开始部署服务器端的WebService,连接之后发现不再有SoapFault,当然程序也不会退出了,不过还是有点小问题,客户端的参数传递不过去,但是服务器端可以传递数据给客户端,另外,我们自己部署的WebService的WSDL文件看起来和大多数的WSDL文件有些差别,比如传递参数的说明。

所以方向又放到WebService服务器端了,之前是通过java自带的WebService来做的接口,后来又试图使用第三方的CXF,AXIS等,查阅了很多方法,最后看到一本书《Java EE 6 企业级应用开发教程》,书中使用了Java EE来做WebService接口,非常简洁。我们之前使用的也是Java自带的WebService接口,只不过是Java,不是Java EE。重新下载一个eclipse-jee就行,还是一样的步骤。

总结一下:
客户端出现的错误主要是由于服务器不再提供免费的WebService接口。
服务器端则换成JavaEE就行了。

补充一下步骤:
客户端的步骤按照这篇即可,文中也提到一些注意点,比如要添加INTERNET权限,
http://blog.csdn.net/lyq8479/article/details/6428288
此外还需要修改一处地方,
在AndroidManifest.xml,把
<<<< uses-sdk android:minSdkVersion=”8” android:targetSdkVersion=”17” />>>>
这句给删除,否则执行到HttpTransportSE.call()这句的时候,程序会卡在这里很久,然后退出。
http://blog.sina.com.cn/s/blog_7768d2210101hlgn.html

服务器端的步骤见
1. Java Web开发环境的搭建(JDK+Eclipse+Tomcat)
http://blog.csdn.net/zhugexubin/article/details/41726587
2. 编写程序
(1)建立一个dynamic web project, Mytest(详情见前文提到的书本)
(2)新建一个类hello,就和你的普通java程序一样
(3)右键点击你刚刚建立的hello.Java,选择Web Services->Create Web Services,然后一路点击next。
(4)查看你刚刚发布的WebService,在网址http://localhost:8080/Mytest/services查看,你会看到WSDL文档,有相应说明