Android在网络中与JavaWeb的项目进行交互的方法
“Google 暑期大学生博客分享大赛 - 2011 Android 成长篇”
最近在研究一些Android和JavaWeb项目的交互问题,总结一点东西在这篇文章里。首先说来,如果想要实现Android在网络上与JavaWeb的交互,就要把JavaWeb的项目的方法暴露在网络中,然后供Android的这一端调用,实现交互,其中,主要用到了两个知识点,WebService和SOAP的使用。
这里我写了一个很简单的小例子来实现交互。
首先,在开发工具中,创建了一个Web Project,一定要对项目添加JAX-WS类库。在代码部分我就只写了一个很简单的计算两个数的和的函数:
- packagecom.demo.pack;
- importjavax.jws.WebMethod;
- importjavax.jws.WebService;
- @WebService
- publicclassCalculate{
- @WebMethod
- publicintadd(finalintnum1,finalintnum2){
- returnnum1+num2;
- }
- }
然后,点击下图中的New Web Service,将刚刚写的这个函数放到网络服务上
点击Finish就创建完成了,这个项目的Calculate方法已经被暴露在了网络上,也就是说,可以供Android调用了。
接下来,我再另外创建了一个Android的项目。在这个Android项目中除了Android的自己的库之外,一定还要引入以下的ksoap2-android-assembly-2.4-jar-with-dependencies.jar
这个jar文件可以使Android的项目访问到Web Service,所以必不可少,一定要加入进来。
在Android的这个项目的布局中,我只是添加了两个EditText来得到用户输入的值,和一个Button去调用WebService上已经托管在网络上的Calculate函数来计算结果。
在Button的监听器类当中,编写了和JavaWeb项目交互的代码,主要的部分具体如下:
- //WebService中的wsdl文件的网络地址
- Stringwsdl="http://192.168.1.102:8080/ch10_app01_WebService/CalculatePort?wsdl";
- //WebService中的命名空间
- Stringnamespace="http://pack.demo.com/";
- //调用方法的名称
- Stringwebmethod="add";
- //创建soapObject对象
- SoapObjectsoapObject=newSoapObject(namespace,webmethod);
- //设置参数
- soapObject.addProperty("arg0",num1);
- soapObject.addProperty("arg1",num2);
- //创建SoapSerializationEnvelope对象,并设置WebService版本号
- SoapSerializationEnvelopeserializationEnvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);
- //设置serializationEnvelope对象的badyOut属性
- serializationEnvelope.bodyOut=soapObject;
- //创建HttpTransportSE对象,并且确定wsdl网络地址
- HttpTransportSEhttpTransportSE=newHttpTransportSE(wsdl);
- try{
- //httpTransportSE调用Call方法
- httpTransportSE.call(null,serializationEnvelope);
- //获取返回的结果对象
- if(serializationEnvelope.getResponse()!=null){
- Objectobj=serializationEnvelope.getResponse();
- //显示获取到的结果对象
- Toast.makeText(getApplicationContext(),"结果为:"+obj.toString(),Toast.LENGTH_LONG).show();
- }
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }catch(XmlPullParserExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
在这段代码中,有必要说明一下的是,在写WebService中的wsdl文件的网络地址时,一定要写ipv4的静态地址,不能写什么localhost。另外,命名空间什么的可以再JavaWeb项目中的CalculateDelegate.java中找到。运行如下:
这样,Android项目就成功的和JavaWeb项目实现了交互!
更多相关文章
- 10个经典的Android开源应用项目
- Android的内存机制和常见泄漏情形
- Android的内存泄漏和调试
- Android(安卓)内存管理 &Memory Leak & OOM 分析
- Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
- 10个经典的Android开源应用项目
- Android中AsyncTask(异步任务)和Handler(线程消息机制)的详解
- 2019AndroidBAT.字节跳动74道高级面试第二篇
- android 模拟器的使用(Android模拟器介绍及创建)