2024年1月31日发(作者:)
Android 客户端开发流程
1 项目流程图
A项目开始项目需求分析阶段开发项目计划未通过项目审核通过AA项目设计阶段开发项目需求调研分析项目产品设计AAAndroid系统架构Android开发环境搭建准备Andrioid开发环境搭建安装JAVA SE
JDK配置JAVA环境变量安装Android
SDK+Eclipse在Eclipse中安装ADT,在Eclipse中配置DK设计实施阶段未通过模拟器AVDAVD创建和配置模拟器运行测试通过Android开发流程创建JAVA工程将动态链接库复制到JAVA工程,运行JAVA程序编写JAVA未通过AAAndroid程序调试未通过通过单元测试编译调试项目测试阶段通过集成、功能、系统测试新软件调优、新机型适配支持AA项目验收阶段产品验收无法满足功能项A结束
2 项目阶段描述
2.1 项目需求分析阶段描述
输入:
《项目产品开发计划书》
《总体方案书》
输出:
《项目产品需求规格说明书》
《产品测试计划及裁减说明书》
2.2 项目设计施阶段
输入:
《项目产品需求规格说明书》
《产品测试计划及裁减说明书》
输出:
《产品概要设计说明书》
《系统测试方案》
《集成测试方案》
2.3 项目实施阶段
输入:
《项目产品需求规格说明书》
《产品概要设计说明书》
待更新的《系统测试方案》
待更新的《集成测试方案》
输出:
《产品详细设计说明书》
更新的《系统测试方案》
更新的《集成测试方案》
2.4 项目测试阶段
输入:
《项目产品需求规格说明书》
《产品详细设计说明书》
《系统测试方案》
《集成测试方案》
《产品单元测试记录》
输出:
《系统测试缺陷记录》
《产品单元测试报告》
《集成测试报告》
《系统测试报告》
2.5 项目验收阶段
输入:
《项目产品需求规格说明书》
《产品详细设计说明书》
《系统测试缺陷记录》
《产品单元测试报告》
《集成测试报告》
《系统测试报告》
输出:
《项目总结报告》
《项目中无法满足功能项说明书》
《维护方案》
本文介绍了如何使用Android搭建客户端,实现手机和服务器的交互。让我们了解如何采用SSH框架,把服务器端的信息用JSON的形式发送到手机端。
AD:
笔者以前是学的Java EE,由于项目需要要开发Android,所以临时补了一个多星期,主要是手机端和服务器端交互,双向开发的。
首先在服务器端,我采用的是SSH框架,struts 2集合了JSON插件,服务器和客户端的信息交互采用的JSON来传输,由于在服务器端用了Struts 2,所以我就用装了一个JSON插件。这样,很轻易的就把服务器端的信息用JSON的形式发送到了手机端。以下是代码:
首先,在服务器端搭建好SSH框架,具体细节就不在陈述。配置如下:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
手机端的代码如下:
首先,手机端有一个缓存类,主要用于缓存一些手机端需要访问的数据,这样的好处是可以达达节省手机和服务器的交互,用单例实现的:
1.
2.
3.
4.
5.
6.
7.
8.
9.
;
;
publicclassCache{
privateUserUser;
privateCache(){
10.
11. }
12. /**构造单例*/
13. privatestaticclassCacheHolder{
14. privatestaticfinalCacheINSTANCE=newCache();
15. }
16. publicCachegetInstance(){
17. CE;
18. }
19. publicUsergetUser(){
20. returnUser;
21. }
22. publicvoidsetUser(UserUser){
23. =User;
24. }
25.
26. }
27.
28. ;
29.
30. ;
31.
32. publicclassCache{
33.
34. privateUserUser;
35.
36. privateCache(){
37.
38. }
39. /**构造单例*/
40. privatestaticclassCacheHolder{
41. privatestaticfinalCacheINSTANCE=newCache();
42. }
43. publicCachegetInstance(){
44. CE;
45. }
46. publicUsergetUser(){
47. returnUser;
48. }
49. publicvoidsetUser(UserUser){
50. =User;
51. }
52.
53. }
接着开始书写手机端的协议,用户向服务器发送请求,同时服务器反馈给手机端信息的:
1.
2.
3.
4.
5.
6.
7.
8.
9.
ol;
edReader;
treamReader;
ist;
;
sponse;
luePair;
10. ient;
11. odedFormEntity;
12. st;
13. tHttpClient;
14. ameValuePair;
15. ception;
16. ject;
17.
18. publicclassBaseProtocol{
19. privateStringBuildersb=newStringBuilder();
20.
21. privateHttpClienthttpClient;
22. privateHttpPosthttpRequest;
23. privateHttpResponseresponse;
24.
25. privateList
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. ity(newUrlEncodedFormEntity(nameValuePair));
42. response=e(httpRequest);
43. }
44.
45. /**
46. *得到返回数据
47. *
48. *@paramurl
49. *@return
50. *@throwsException
51. */
52. protectedvoidparse()throwsException{
53. //TODO状态处理500200
54. if(tusLine().getStatusCode()==200){
55.
56. BufferedReaderbufferedReader2=newBufferedReader(
57. newInputStreamReader(ity().getContent()));
58. for(Strings=ne();s!=null;s=bufferedReader2
59. .readLine()){
60. (s);
61. }
62. }
63. }
64.
65. /**
66. *向服务器发送信息
67. *
68. *@paramkey
69. *@paramvalue
70. */
71. publicvoidaddNameValuePair(Stringkey,Stringvalue){
72. (newBasicNameValuePair(key,value));
73. }
74.
75. /**
76. *返回JSONObject对象数据模型
77. *
78. *@return
79. *@throwsJSONException
80. */
81. publicJSONObjectgetJSON()throwsJSONException{
82. returnnewJSONObject(ng());
83. }
84.
85. }
86.
87. ol;
88.
89. edReader;
90. treamReader;
91. ist;
92. ;
93.
94. sponse;
95. luePair;
96. ient;
97. odedFormEntity;
98. st;
99. tHttpClient;
100. ameValuePair;
101. ception;
102. ject;
103.
104. publicclassBaseProtocol{
105. privateStringBuildersb=newStringBuilder();
106.
107. privateHttpClienthttpClient;
108. privateHttpPosthttpRequest;
109. privateHttpResponseresponse;
110.
111. privateList
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. ity(newUrlEncodedFormEntity(nameValuePair));
128. response=e(httpRequest);
129. }
130.
131. /**
132. *得到返回数据
133. *
134. *@paramurl
135. *@return
136. *@throwsException
137. */
138. protectedvoidparse()throwsException{
139. //TODO状态处理500200
140. if(tusLine().getStatusCode()==200){
141.
142. BufferedReaderbufferedReader2=newBufferedReader(
143. newInputStreamReader(ity().getContent()));
144. for(Strings=ne();s!=null;s=bufferedReader2
145. .readLine()){
146. (s);
147. }
148. }
149. }
150.
151. /**
152. *向服务器发送信息
153. *
154. *@paramkey
155. *@paramvalue
156. */
157. publicvoidaddNameValuePair(Stringkey,Stringvalue){
158. (newBasicNameValuePair(key,value));
159. }
160.
161. /**
162. *返回JSONObject对象数据模型
163. *
164. *@return
165. *@throwsJSONException
166. */
167. publicJSONObjectgetJSON()throwsJSONException{
168. returnnewJSONObject(ng());
169. }
170.
171. }
接着是登陆协议,在这里我只是模拟登陆使用的一个类,仅供大家参考:
1.
2.
3.
4.
5.
6.
7.
8.
9.
ol;
ject;
;
publicclassLoginProtocolextendsBaseProtocol{
privatefinalstaticStringURL="";
10.
11. publicbooleancheckLogin(Userusr){
12. try{
13. pack(URL);
14. parse();
15. JSONObjectobj=N();
16. if(ing("result").equals("failed")){
17. returnfalse;
18. }else{
19. returntrue;
20. }
21. }catch(Exceptione){
22. tackTrace();
23. returnfalse;
24. }
25. }
26.
27. }
28.
29. ol;
30.
31. ject;
32.
33. ;
34.
35. publicclassLoginProtocolextendsBaseProtocol{
36.
37. privatefinalstaticStringURL="";
38.
39. publicbooleancheckLogin(Userusr){
40. try{
41. pack(URL);
42. parse();
43. JSONObjectobj=N();
44. if(ing("result").equals("failed")){
45. returnfalse;
46. }else{
47. returntrue;
48. }
49. }catch(Exceptione){
50. tackTrace();
51. returnfalse;
52. }
53. }
54.
55. }
然后是User实体类,主要用于保存用户信息:
1.
2.
3.
4.
5.
6.
7.
8.
9.
;
publicclassUser{
privateStringusername;
privateStringpassword;
publicStringgetUsername(){
returnusername;
}
publicvoidsetUsername(Stringusername){
10. me=username;
11. }
12. publicStringgetPassword(){
13. returnpassword;
14. }
15. publicvoidsetPassword(Stringpassword){
16. rd=password;
17. }
18.
19. }
20.
21. ;
22.
23. publicclassUser{
24. privateStringusername;
25. privateStringpassword;
26. publicStringgetUsername(){
27. returnusername;
28. }
29. publicvoidsetUsername(Stringusername){
30. me=username;
31. }
32. publicStringgetPassword(){
33. returnpassword;
34. }
35. publicvoidsetPassword(Stringpassword){
36. rd=password;
37. }
38.
39. }
最后就是LoginActivity里边判断登陆的代码了,详细代码不再贴出来了,仅贴一个判断登陆的代码:
1.
2.
3.
4.
5.
6.
7.
8.
9.
privatevoidcheckedData(){
username=((EditText)findViewById(me)).getText().toString();
password=((EditText)findViewById(rd)).getText().toString();
Useruser=newUser();
rname(username);
sword(password);
LoginProtocollogin=newLoginProtocol();
booleanresult=ogin(user);
10.
11. if(result){tance().setUserSession(user);
12. xt(getApplicationContext(),"登录成功",1000).show();
13. Intentintent=newIntent();
14. ss(,);
15. startActivity(intent);
16. }else{xt(,"密码或用户名不匹配,请重新输入!",1000).show();
17. }
18. }
19.
20. privatevoidcheckedData(){
21. username=((EditText)findViewById(me)).getText().toString();
22. password=((EditText)findViewById(rd)).getText().toString();
23.
24. Useruser=newUser();
25. rname(username);
26. sword(password);
27. LoginProtocollogin=newLoginProtocol();
28. booleanresult=ogin(user);
29.
30. if(result){ tance().setUserSession(user);
31. xt(getApplicationContext(),"登录成功",1000).show();
32. Intentintent=newIntent();
33. ss(,);
34. startActivity(intent);
35. }else{ xt(,"密码或用户名不匹配,请重新输入!",1000).show();
36. }
37. }
以上代码为了跟大家分享一下,感觉手机端和服务器双向开发非常过瘾。同时对Android的兴趣大大提升,它也没有我们想象中的那么难。
本文发布于:2024-01-31 02:36:45,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170663980524729.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |