用Android搭建客户端手机和服务器交互开发实例

本文介绍了如何使用Android搭建客户端,实现手机和服务器的交互。让我们了解如何采用SSH框架,把服务器端的信息用JSON的形式发送到手机端。

AD:

笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。

首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:

首先,在服务器端搭建好SSH框架,具体细节就不在陈述。struts.xml配置如下: 1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

手机端的代码如下:

首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:

1.

2.

3.

4.

5.

6.

7.

8.

9. packagecom.jclick.cache; importcom.jclick.bean.User; publicclassCache{ privateUserUser; privateCache(){

10.

11. }

12. /**构造单例*/

13. privatestaticclassCacheHolder{

14. privatestaticfinalCacheINSTANCE=newCache();

15. }

16. publicCachegetInstance(){

17. returnCacheHolder.INSTANCE;

18. }

19. publicUsergetUser(){

20. returnUser;

21. }

22. publicvoidsetUser(UserUser){

23. this.User=User;

24. }

25.

26. }

27.

28. packagecom.jclick.cache;

29.

30. importcom.jclick.bean.User;

31.

32. publicclassCache{

33.

34. privateUserUser;

35.

36. privateCache(){

37.

38. }

39. /**构造单例*/

40. privatestaticclassCacheHolder{

41. privatestaticfinalCacheINSTANCE=newCache();

42. }

43. publicCachegetInstance(){

44. returnCacheHolder.INSTANCE;

45. }

46. publicUsergetUser(){

47. returnUser;

48. }

49. publicvoidsetUser(UserUser){

50. this.User=User;

51. }

52.

53. }

接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的: 1.

2.

3.

4.

5.

6.

7.

8.

9. packagecom.jclick.protocol; importjava.io.BufferedReader; importjava.io.InputStreamReader; importjava.util.ArrayList; importjava.util.List; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair;

10. importorg.apache.http.client.HttpClient;

11. importorg.apache.http.client.entity.UrlEncodedFormEntity;

12. importorg.apache.http.client.methods.HttpPost;

13. importorg.apache.http.impl.client.DefaultHttpClient;

14. importorg.apache.http.message.BasicNameValuePair;

15. importorg.json.JSONException;

16. importorg.json.JSONObject;

17.

18. publicclassBaseProtocol{

19. privateStringBuildersb=newStringBuilder();

20.

21. privateHttpClienthttpClient;

22. privateHttpPosthttpRequest;

23. privateHttpResponseresponse;

24.

25. privateListnameValuePair=newArrayList(

);

26.

27. BaseProtocol(){

28. httpClient=newDefaultHttpClient();

29. }

30.

31. /**

32. *向服务器端发送请求

33. *

34. *@paramurl

35. *@throwsException

36. */

37. protectedvoidpack(Stringurl)throwsException{

38. httpClient=newDefaultHttpClient();

39. httpRequest=newHttpPost(url);

40.

41. httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair));

42. response=httpClient.execute(httpRequest);

43. }

44.

45. /**

46. *得到返回数据

47. *

48. *@paramurl

49. *@return

50. *@throwsException

51. */

52. protectedvoidparse()throwsException{

53. //TODO状态处理500200

54. if(response.getStatusLine().getStatusCode()==200){

55.

56. BufferedReaderbufferedReader2=newBufferedReader(

57. newInputStreamReader(response.getEntity().getContent()));

58. for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2

59. .readLine()){

60. sb.append(s);

61. }

62. }

63. }

64.

65. /**

66. *向服务器发送信息

67. *

68. *@paramkey

69. *@paramvalue

70. */

71. publicvoidaddNameValuePair(Stringkey,Stringvalue){

72. nameValuePair.add(newBasicNameValuePair(key,value));

73. }

74.

75. /**

76. *返回JSONObject对象数据模型

77. *

78. *@return

79. *@throwsJSONException

80. */

81. publicJSONObjectgetJSON()throwsJSONException{

82. returnnewJSONObject(sb.toString());

83. }

84.

85. }

86.

87. packagecom.jclick.protocol;

88.

89. importjava.io.BufferedReader;

90. importjava.io.InputStreamReader;

91. importjava.util.ArrayList;

92. importjava.util.List;

93.

94. importorg.apache.http.HttpResponse;

95. importorg.apache.http.NameValuePair;

96. importorg.apache.http.client.HttpClient;

97. importorg.apache.http.client.entity.UrlEncodedFormEntity;

98. importorg.apache.http.client.methods.HttpPost;

99. importorg.apache.http.impl.client.DefaultHttpClient;

100. importorg.apache.http.message.BasicNameValuePair;

101. importorg.json.JSONException;

102. importorg.json.JSONObject;

103.

104. publicclassBaseProtocol{

105. privateStringBuildersb=newStringBuilder();

106.

107. privateHttpClienthttpClient;

108. privateHttpPosthttpRequest;

109. privateHttpResponseresponse;

110.

111. privateListnameValuePair=newArrayList

ir>();

112.

113. BaseProtocol(){

114. httpClient=newDefaultHttpClient();

115. }

116.

117. /**

118. *向服务器端发送请求

119. *

120. *@paramurl

121. *@throwsException

122. */

123. protectedvoidpack(Stringurl)throwsException{

124. httpClient=newDefaultHttpClient();

125. httpRequest=newHttpPost(url);

126.

127. httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair)

);

128. response=httpClient.execute(httpRequest);

129. }

130.

131. /**

132. *得到返回数据

133. *

134. *@paramurl

135. *@return

136. *@throwsException

137. */

138. protectedvoidparse()throwsException{

139. //TODO状态处理500200

140. if(response.getStatusLine().getStatusCode()==200){ 141.

142. BufferedReaderbufferedReader2=newBufferedReader(

143. newInputStreamReader(response.getEntity().getCon

tent()));

144. for(Strings=bufferedReader2.readLine();s!=null;s=buffere

dReader2

145. .readLine()){

146. sb.append(s);

147. }

148. }

149. }

150.

151. /**

152. *向服务器发送信息

153. *

154. *@paramkey

155. *@paramvalue

156. */

157. publicvoidaddNameValuePair(Stringkey,Stringvalue){

158. nameValuePair.add(newBasicNameValuePair(key,value)); 159. }

160.

161. /**

162. *返回JSONObject对象数据模型

163. *

164. *@return

165. *@throwsJSONException

166. */

167. publicJSONObjectgetJSON()throwsJSONException{

168. returnnewJSONObject(sb.toString());

169. }

170.

171. }

接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:

1.

2.

3.

4.

5.

6.

7.

8.

9. packagecom.jclick.protocol; importorg.json.JSONObject; importcom.jclick.bean.User; publicclassLoginProtocolextendsBaseProtocol{ privatefinalstaticStringURL=

11. publicbooleancheckLogin(Userusr){

12. try{

13. pack(URL);

14. parse();

15. JSONObjectobj=this.getJSON();

16. if(obj.getString(

17. returnfalse;

18. }else{

19. returntrue;

20. }

21. }catch(Exceptione){

22. e.printStackTrace();

23. returnfalse;

24. }

25. }

26.

27. }

28.

29. packagecom.jclick.protocol;

30.

31. importorg.json.JSONObject;

32.

33. importcom.jclick.bean.User;

34.

35. publicclassLoginProtocolextendsBaseProtocol{

36.

37. privatefinalstaticStringURL=

38.

39. publicbooleancheckLogin(Userusr){

40. try{

41. pack(URL);

42. parse();

43. JSONObjectobj=this.getJSON();

44. if(obj.getString(

45. returnfalse;

46. }else{

47. returntrue;

48. }

49. }catch(Exceptione){

50. e.printStackTrace();

51. returnfalse;

52. }

53. }

54.

55. }

然后是User实体类,主要用于保存用户信息:

1.

2.

3.

4.

5.

6.

7.

8.

9. packagecom.jclick.bean; publicclassUser{ privateStringusername; privateStringpassword; publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){

10. this.username=username;

11. }

12. publicStringgetPassword(){

13. returnpassword;

14. }

15. publicvoidsetPassword(Stringpassword){

16. this.password=password;

17. }

18.

19. }

20.

21. packagecom.jclick.bean;

22.

23. publicclassUser{

24. privateStringusername;

25. privateStringpassword;

26. publicStringgetUsername(){

27. returnusername;

28. }

29. publicvoidsetUsername(Stringusername){

30. this.username=username;

31. }

32. publicStringgetPassword(){

33. returnpassword;

34. }

35. publicvoidsetPassword(Stringpassword){

36. this.password=password;

37. }

38.

39. }

最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:

1.

2.

3.

4.

5.

6.

7.

8.

9. privatevoidcheckedData(){ username=((EditText)findViewById(R.id.username)).getText().toString(); password=((EditText)findViewById(R.id.password)).getText().toString(); Useruser=newUser(); user.setUsername(username); user.setPassword(password); LoginProtocollogin=newLoginProtocol(); booleanresult=login.checkLogin(user);

10.

11. if(result){SpiderCache.getInstance().setUserSession(user);

12. Toast.makeText(getApplicationContext(),

13. Intentintent=newIntent();

14. intent.setClass(LoginActivity.this,WelcomeActivity.class);

15. startActivity(intent);

16. }else{Toast.makeText(LoginActivity.this,

17. }

18. }

19.

20. privatevoidcheckedData(){

21. username=((EditText)findViewById(R.id.username)).getText

().toString();

22. password=((EditText)findViewById(R.id.password)).getText

().toString();

23.

24. Useruser=newUser();

25. user.setUsername(username);

26. user.setPassword(password);

27. LoginProtocollogin=newLoginProtocol();

28. booleanresult=login.checkLogin(user);

29.

30. if(result){ SpiderCache.getInstance().setUse

rSession(user);

31. Toast.makeText(getApplicationContext(),

32. Intentintent=newIntent();

33. intent.setClass(LoginActivity.this,WelcomeActivity.c

lass);

34. startActivity(intent);

35. }else{ Toast.makeText(LoginActivity.this,

密码或用户名不匹配,请重新输入!

36. }

37. }

以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。


相关文章

  • [软件开发-软件测试课程设计]模版(学生)V20**年
  • 西安文理学院信息工程学院 课程设计报告 设计名称: 软件项目开发课程设计 设计题目: 点餐系统 学生学号: 1402130215 专业班级: 软件工程13级5班 学生姓名: 乔滢 学生成绩: 指导教师: 车鹏飞 课题工作时间: 2016.6.16 至 2016.6.27 说明: 1.报告中的任务书. ...

  • 移动应用开发实验大纲
  • <移动应用开发实验>课程教学大纲 一.课程基本信息 二.实验性质.地位和任务 移动应用软件开发是高等院校信息管理与信息系统专业本科学生一门重要的理论与实践课程,它是为培养我国现代化建设所需要的高质量信息技术人才服务的.Android作为目前的主流高端智能手机操作系统,其前景不可限量.本课 ...

  • 基于Android平台学生考勤系统的设计概要
  • 摘要:目前随着移动手机的流行,人们越来越离不开手机.该系统主要解决学生到课堂进行签到,帮助教师在课堂进行课堂点到,从而节约时间提高效率:针对结果教师可以及时与辅导员或班干部进行联系,从而督促学生到课堂上课.该系统采用了B/S的模式结构,对于数据的来源主要是管理员进行录入,教师只看结果,学生进行签到和 ...

  • Android研发工程师应聘简历
  • 周紫宁 男 | 未婚 | 24 | 户口:湖南常德 | 现居住于上海 2年工作经验 Tel:[1**********] E-mail: [1**********]@163.com 求职意向 ·工作性质: 全职 ·期望职业: 手机软件开发工程师 ·期望行业: 互联网/电子商务 ·工作地区: 上海 ·期 ...

  • 软件工程--可行性分析报告
  • 计算机与通信工程学院 <软件工程>实验报告 触电影协资源管理系统 可行性分析报告 Chudian Community Resource Management System The Report of Feasibility Studies 专 业: 软件工程 班 级: 软件 11-02 ...

  • 安卓天气预报软件需求分析说明书
  • ● <Android 应用程序开发>课程 ● ● ● ● ● ● ● ● ● ● ● 天气预报软件设计 需求分析报告 Android 天气预报软件设计 Issue Date – XXXX/XX/XX //发布时间 ● <Android 应用程序开发>课程 天气预报软件设计 ● ...

  • android手游产品需求文档(初稿)
  • PPlive Android 手游 产品需求说明书 当前版本:初始版本: 作者:创建日期:最后更新日期: V1.0V1.0版本历史与变更说明 作者邓伟 完成/更新时间2011-10-21 最初版本需求 变更描述 目录 1产品总概.................................... ...

  • 安卓面试基础知识总结
  • 1 Activity 1.1 Activity 的概念 是Android 应用层开发的四大组件之一,主要负责和用户交互部分,有自己的生命周期,在其上可以布置按钮,文本框等各种控件,简单来说就是Android 的UI 部分. 1.2 Activity 与View 的区别 1) Activity 是四大 ...

  • Android平台下的空气质量和天气情况查询应用设计与实现
  • 摘要:Android体系结构采用软件堆层(Software Stack)的架构,提供一系列的核心应用程序包括浏览器.电子邮件客户端.通讯录和日历等,其市场份额长年保持在50%以上,无论从技术层面还是受众范围来看都是非常合适的应用开发平台. 关键词:Android平台:系统设计:大气环境 中图分类号: ...

© 2024 范文中心 | 联系我们 webmaster# onjobs.com.cn