“Google 暑期大学生博客分享大赛 - 2011 Android 成长篇”

最近在研究一些Android和JavaWeb项目的交互问题,总结一点东西在这篇文章里。首先说来,如果想要实现Android在网络上与JavaWeb的交互,就要把JavaWeb的项目的方法暴露在网络中,然后供Android的这一端调用,实现交互,其中,主要用到了两个知识点,WebService和SOAP的使用。

这里我写了一个很简单的小例子来实现交互。

首先,在开发工具中,创建了一个Web Project,一定要对项目添加JAX-WS类库。在代码部分我就只写了一个很简单的计算两个数的和的函数:

        
  1. packagecom.demo.pack;
  2. importjavax.jws.WebMethod;
  3. importjavax.jws.WebService;
  4. @WebService
  5. publicclassCalculate{
  6. @WebMethod
  7. publicintadd(finalintnum1,finalintnum2){
  8. returnnum1+num2;
  9. }
  10. }

然后,点击下图中的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项目交互的代码,主要的部分具体如下:

        
  1. //WebService中的wsdl文件的网络地址
  2. Stringwsdl="http://192.168.1.102:8080/ch10_app01_WebService/CalculatePort?wsdl";
  3. //WebService中的命名空间
  4. Stringnamespace="http://pack.demo.com/";
  5. //调用方法的名称
  6. Stringwebmethod="add";
  7. //创建soapObject对象
  8. SoapObjectsoapObject=newSoapObject(namespace,webmethod);
  9. //设置参数
  10. soapObject.addProperty("arg0",num1);
  11. soapObject.addProperty("arg1",num2);
  12. //创建SoapSerializationEnvelope对象,并设置WebService版本号
  13. SoapSerializationEnvelopeserializationEnvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11);
  14. //设置serializationEnvelope对象的badyOut属性
  15. serializationEnvelope.bodyOut=soapObject;
  16. //创建HttpTransportSE对象,并且确定wsdl网络地址
  17. HttpTransportSEhttpTransportSE=newHttpTransportSE(wsdl);
  18. try{
  19. //httpTransportSE调用Call方法
  20. httpTransportSE.call(null,serializationEnvelope);
  21. //获取返回的结果对象
  22. if(serializationEnvelope.getResponse()!=null){
  23. Objectobj=serializationEnvelope.getResponse();
  24. //显示获取到的结果对象
  25. Toast.makeText(getApplicationContext(),"结果为:"+obj.toString(),Toast.LENGTH_LONG).show();
  26. }
  27. }catch(IOExceptione){
  28. //TODOAuto-generatedcatchblock
  29. e.printStackTrace();
  30. }catch(XmlPullParserExceptione){
  31. //TODOAuto-generatedcatchblock
  32. e.printStackTrace();
  33. }

在这段代码中,有必要说明一下的是,在写WebService中的wsdl文件的网络地址时,一定要写ipv4的静态地址,不能写什么localhost。另外,命名空间什么的可以再JavaWeb项目中的CalculateDelegate.java中找到。运行如下:

这样,Android项目就成功的和JavaWeb项目实现了交互!

更多相关文章

  1. 10个经典的Android开源应用项目
  2. Android的内存机制和常见泄漏情形
  3. Android的内存泄漏和调试
  4. Android(安卓)内存管理 &Memory Leak & OOM 分析
  5. Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
  6. 10个经典的Android开源应用项目
  7. Android中AsyncTask(异步任务)和Handler(线程消息机制)的详解
  8. 2019AndroidBAT.字节跳动74道高级面试第二篇
  9. android 模拟器的使用(Android模拟器介绍及创建)

随机推荐

  1. Android软件中嵌入地图之二:百度地图
  2. android 中自动更新时间机制
  3. Android利用activity启动模式退出整个应
  4. Android开发,addlistener和setlistener的
  5. Android之ExpandableListView的属性(Group
  6. 2011.07.12(3)——— android ui的一些概念
  7. Android(安卓)内存泄漏LeakCanary使用详
  8. Android进度条——ProgressDialog
  9. Android笔记2——开发前奏2工程目录介绍
  10. 关于android设备唯一区分device id的取得