之前的博客上写了很多自己感想,感悟没有涉及到具体技术,感觉愧对大家 :) ,今天来点干货。

      现在孤立的手机端应用已经不多了,大都需要涉及到和服务器端通信。想当时我们团队做第一款应用时为解决这个问题费了不少功夫,现在这个技术已经在团队内部固化和成熟了。在这里和大家分享一下。

         大多数的通信方案有 JSON,或web service。我们最终确认使用的是web service(J2EE服务器端)+ ksoap(android客户端),原因是我们没有PHP方面的知识积累,选用Java至少我们还懂一些。可是在之后的实作里碰到很大的困难,一是网上没有找到详细的一步步从头开始资料;二是,网上提供的例子很简单,我记得是一个做加法的例子;实际中,经常要涉及到结构参数的回传和调用;三是没有找到服务器端+android客户端的完整例子;都是割裂的,要嘛讲的是服务器端,要嘛讲的是客户端。现在把我们的经验系统的分享给大家。

 

         先介绍一下服务器端开发环境是 myeclipse 9.0。

 

1,建立 web service工程,如下所示

 

 

2,填写工程配置,注意红圈部分,一定要选“JAX-WS”;点击“确认”,就生成了基本的工程。

 

3,这里我们做些准备工作,实现一个客户端启动时自动检测版本信息的例子:

      (1)建立一个 bean,注意这是个POJO,需要有setXXX, getXXX,否则将不能正常工作。

1 public class Clientversion {
  2     // Fields
  3 
  4     private Integer oldestVersion; // 目前可兼容的最老版本
  5 
  6     private Integer currentVersion; // 当前最新版本
  7 
  8     private String downloadUrl1; // 最新版客户端下载地址1
  9 
 10     private String downloadUrl2; // 最新版客户端下载地址2
 11 
 12     private String releaseNote; // 关于最新版的描述
 13 
 14     // Constructors
 15 
 16     /** default constructor */
 17 
 18     public Clientversion() {
 19 
 20     }
 21 
 22     /** full constructor */
 23 
 24     public Clientversion(Integer oldestVersion, Integer currentVersion,
 25 
 26     String downloadUrl1, String downloadUrl2, String releaseNote) {
 27 
 28         this.oldestVersion = oldestVersion;
 29 
 30         this.currentVersion = currentVersion;
 31 
 32         this.downloadUrl1 = downloadUrl1;
 33 
 34         this.downloadUrl2 = downloadUrl2;
 35 
 36         this.releaseNote = releaseNote;
 37 
 38     }
 39 
 40     // Propertyaccessors
 41 
 42     public Integer getOldestVersion() {
 43 
 44         return this.oldestVersion;
 45 
 46     }
 47 
 48     public void setOldestVersion(Integer oldestVersion) {
 49 
 50         this.oldestVersion = oldestVersion;
 51 
 52     }
 53 
 54     public Integer getCurrentVersion() {
 55 
 56         return this.currentVersion;
 57 
 58     }
 59 
 60     public void setCurrentVersion(Integer currentVersion) {
 61 
 62         this.currentVersion = currentVersion;
 63 
 64     }
 65 
 66     public String getDownloadUrl1() {
 67 
 68         return this.downloadUrl1;
 69 
 70     }
 71 
 72     public void setDownloadUrl1(String downloadUrl1) {
 73 
 74         this.downloadUrl1 = downloadUrl1;
 75 
 76     }
 77 
 78     public String getDownloadUrl2() {
 79 
 80         return this.downloadUrl2;
 81 
 82     }
 83 
 84     public void setDownloadUrl2(String downloadUrl2) {
 85 
 86         this.downloadUrl2 = downloadUrl2;
 87 
 88     }
 89 
 90     public String getReleaseNote() {
 91 
 92         return this.releaseNote;
 93 
 94     }
 95 
 96     public void setReleaseNote(String releaseNote) {
 97 
 98         this.releaseNote = releaseNote;
 99 
100     }
101 
102 }

(2)设一个类,定义一个接口函数

RequestHandler.java

1 package cn.stepbystep.service;
 2 
 3 import cn.stepbystep.bean.Clientversion;
 4 
 5 public class RequestHandler {
 6     public Clientversion requestVersion(int version) // 客户端调用的接口,传入client端的参数
 7 
 8     {
 9 
10         Clientversion info = new Clientversion();
11 
12         // 构造一个版本信息,之后回传给客户端
13 
14         info.setCurrentVersion(103);
15 
16         info.setOldestVersion(100);
17 
18         info.setDownloadUrl1("http://www.smallke.net");
19 
20         info.setDownloadUrl1("http://www.smallke.net/promote.html");
21 
22         info.setReleaseNote("这是个例子");
23 
24         return info;
25 
26     }
27 
28 }

(3)最后的工程的结构是这样的:

 

4,生成 web service接口

(1)    在快捷工具栏选择“New Web Service”

 

(2)    出现一个对话框,做出图示选择,然后点“next”

 

(3) 选择需要实现web service的接口

注意,在红圈处输入刚才我们实现的类;其他部分内容为自动产生,不需要做任何修改;然后点击“finish”

 

     (4) 再次查看工程,会发现多了一个文件,这是web service自动生成的

 

同时会在web.xml里发现多几行配置

 

 

5,到此,服务器端的工作就完成了。让我们来简单测试。

 (1)在工程上右键,弹出菜单,选择 Debug as -> Myeclipse server application

 

(2) 选择一个应用容器,我选的是 MyEclipse自带的tomcat

 

 

(3) 工程起来后,自动切到默认主页

 

 

(4) 在地址栏上输入这个地址,就会看到以下页面;到此证明服务器端是OK了。