




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Android 客戶端開發(fā)流程1 項(xiàng)目流程圖2 項(xiàng)目階段描述2.1 項(xiàng)目需求分析階段描述輸入:項(xiàng)目產(chǎn)品開發(fā)計(jì)劃書總體方案書輸出:項(xiàng)目產(chǎn)品需求規(guī)格說明書產(chǎn)品測試計(jì)劃及裁減說明書2.2 項(xiàng)目設(shè)計(jì)施階段輸入:項(xiàng)目產(chǎn)品需求規(guī)格說明書產(chǎn)品測試計(jì)劃及裁減說明書輸出:產(chǎn)品概要設(shè)計(jì)說明書系統(tǒng)測試方案集成測試方案2.3 項(xiàng)目實(shí)施階段輸入:項(xiàng)目產(chǎn)品需求規(guī)格說明書產(chǎn)品概要設(shè)計(jì)說明書待更新的系統(tǒng)測試方案待更新的集成測試方案輸出:產(chǎn)品詳細(xì)設(shè)計(jì)說明書更新的系統(tǒng)測試方案更新的集成測試方案2.4 項(xiàng)目測試階段輸入:項(xiàng)目產(chǎn)品需求規(guī)格說明書產(chǎn)品詳細(xì)設(shè)計(jì)說明書系統(tǒng)測試方案集成測試方案產(chǎn)品單元測試記錄輸出:系統(tǒng)測試缺陷記錄產(chǎn)品單元測
2、試報(bào)告集成測試報(bào)告系統(tǒng)測試報(bào)告2.5 項(xiàng)目驗(yàn)收階段輸入:項(xiàng)目產(chǎn)品需求規(guī)格說明書產(chǎn)品詳細(xì)設(shè)計(jì)說明書系統(tǒng)測試缺陷記錄產(chǎn)品單元測試報(bào)告集成測試報(bào)告系統(tǒng)測試報(bào)告輸出:項(xiàng)目總結(jié)報(bào)告項(xiàng)目中無法滿足功能項(xiàng)說明書維護(hù)方案本文介紹了如何使用Android搭建客戶端,實(shí)現(xiàn)手機(jī)和服務(wù)器的交互。讓我們了解如何采用SSH框架,把服務(wù)器端的信息用JSON的形式發(fā)送到手機(jī)端。AD:筆者以前是學(xué)的Java EE,由于項(xiàng)目需要要開發(fā)Android,所以臨時(shí)補(bǔ)了一個(gè)多星期,主要是手機(jī)端和服務(wù)器端交互,雙向開發(fā)的。首先在服務(wù)器端,我采用的是SSH框架,struts 2集合了JSON插件,服務(wù)器和客戶端的信息交互采用的JSON來傳輸
3、,由于在服務(wù)器端用了Struts 2,所以我就用裝了一個(gè)JSON插件。這樣,很輕易的就把服務(wù)器端的信息用JSON的形式發(fā)送到了手機(jī)端。以下是代碼:首先,在服務(wù)器端搭建好SSH框架,具體細(xì)節(jié)就不在陳述。struts.xml配置如下:1. <packagename="login"extends="json-default"> 2. <actionname="login"class="com.jclick.test.LoginAction"method="login"&g
4、t; 3. <resulttype="json"><paramname="includeProperties">result</param></result> 4. </action> 5. </package> 6. 7. <packagename="login"extends="json-default"> 8
5、. <actionname="login"class="com.jclick.test.LoginAction"method="login"> 9. <resulttype="json"><paramname="includeProperties">result</param></result> 10. &
6、#160; </action> 11. </package> 手機(jī)端的代碼如下:首先,手機(jī)端有一個(gè)緩存類,主要用于緩存一些手機(jī)端需要訪問的數(shù)據(jù),這樣的好處是可以達(dá)達(dá)節(jié)省手機(jī)和服務(wù)器的交互,用單例實(shí)現(xiàn)的:1. packagecom.jclick.cache; 2. 3. importcom.jclick.bean.User; 4. 5. publicclassCache 6. 7. privateUserUse
7、r; 8. 9. privateCache() 10. 11. 12. /*構(gòu)造單例*/ 13. privatestaticclassCacheHolder 14. privatestaticfinalCacheINSTANCE=newCache(); 15. 16. publicCachegetInstance() 17. returnCacheHolder.INSTANCE; 18. 19. publicUsergetUser() 20.
8、 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.
9、160; privateUserUser; 35. 36. privateCache() 37. 38. 39. /*構(gòu)造單例*/ 40. privatestatic
10、classCacheHolder 41. privatestaticfinalCacheINSTANCE=newCache(); 42. 43. publicCachegetInstance() 44. returnCacheHolder.INSTANCE; &
11、#160;45. 46. publicUsergetUser() 47. returnUser; 48. 49. publicvoidsetUser(UserUser) 50.
12、; this.User=User; 51. 52. 53. 接著開始書寫手機(jī)端的協(xié)議,用戶向服務(wù)器發(fā)送請求,同時(shí)服務(wù)器反饋給手機(jī)端信息的:1. tocol; 2. 3. importjava.io.BufferedReader; 4. importjava.io.InputStreamReader; 5. importjava.util.ArrayList; 6. impor
13、tjava.util.List; 7. 8. importorg.apache.http.HttpResponse; 9. importorg.apache.http.NameValuePair; 10. importorg.apache.http.client.HttpClient; 11. importorg.apache.http.client.entity.UrlEncodedFormEntity; 12. importorg.apache.http.client.methods.HttpPost; 1
14、3. 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.
15、 21. privateHttpClienthttpClient; 22. privateHttpPosthttpRequest; 23. privateHttpResponseresponse; 24. 25. privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>(); 26. 27. BaseProtocol() 28. httpClient=newDefaultHttpClient(); &
16、#160;29. 30. 31. /* 32. *向服務(wù)器端發(fā)送請求 33. * 34. *paramurl 35. *throwsException 36. */ 37. protectedvoidpack(Stringurl)throwsException 38. httpClient=newDefaultHttpClient(); 39. httpRequest=newHttpPost(url); 40. 41. httpRequest.setEn
17、tity(newUrlEncodedFormEntity(nameValuePair); 42. response=httpClient.execute(httpRequest); 43. 44. 45. /* 46. *得到返回?cái)?shù)據(jù) 47. * 48. *paramurl 49. *return 50. *throwsException 51. */ 52. protectedvoidparse()throwsException 53. /TODO狀態(tài)
18、處理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()
19、 60. sb.append(s); 61. 62. 63. 64. 65. /* 66. *向服務(wù)器發(fā)送信息 67. * 68. *paramkey 69. *paramvalue 70. */ 71. publicvoidaddNameValuePair(Stringkey,Stringvalue) 72. nameValuePair.add(newBasicNameValuePair(key,value); 73.
20、;74. 75. /* 76. *返回JSONObject對象數(shù)據(jù)模型 77. * 78. *return 79. *throwsJSONException 80. */ 81. publicJSONObjectgetJSON()throwsJSONException 82. returnnewJSONObject(sb.toString(); 83. 84. 85. 86. 87. tocol; &
21、#160;88. 89. dReader; 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;
22、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. impor
23、torg.json.JSONObject; 103. 104. publicclassBaseProtocol 105. privateStringBuildersb=newStringBuilder(); 106. 107. privateHttpClienthttpClient; 108. privateHttpPosthttpRequest; 109.
24、; privateHttpResponseresponse; 110. 111. privateList<NameValuePair>nameValuePair=newArrayList<NameValuePair>(); 112. 113. BaseProtocol() 114. htt
25、pClient=newDefaultHttpClient(); 115. 116. 117. /* 118. *向服務(wù)器端發(fā)送請求 119. * 120. *paramurl 121. *throwsException
26、60;122. */ 123. protectedvoidpack(Stringurl)throwsException 124. httpClient=newDefaultHttpClient(); 125. httpRequest=newHttpPost(url);
27、0;126. 127. httpRequest.setEntity(newUrlEncodedFormEntity(nameValuePair); 128. response=httpClient.execute(httpRequest); 129. 130. 131. &
28、#160; /* 132. *得到返回?cái)?shù)據(jù) 133. * 134. *paramurl 135. *return 136. *throwsException 137. */ 138.
29、 protectedvoidparse()throwsException 139. /TODO狀態(tài)處理500200 140. if(response.getStatusLine().getStatusCode()=200) 141. 142.
30、; BufferedReaderbufferedReader2=newBufferedReader( 143. newInputStreamReader(response.getEntity().getContent(); 144.
31、0; for(Strings=bufferedReader2.readLine();s!=null;s=bufferedReader2 145. .readLine() 146. &
32、#160; sb.append(s); 147. 148. 149. 150. 151. /*
33、0;152. *向服務(wù)器發(fā)送信息 153. * 154. *paramkey 155. *paramvalue 156. */ 157. publicvoidaddNameValuePair(Stringkey,Stringvalue) 15
34、8. nameValuePair.add(newBasicNameValuePair(key,value); 159. 160. 161. /* 162. *返回JSONObject對象數(shù)據(jù)模型 163. * 164.
35、60; *return 165. *throwsJSONException 166. */ 167. publicJSONObjectgetJSON()throwsJSONException 168. returnnewJSONObject(sb.toString(); 169.
36、 170. 171. 接著是登陸協(xié)議,在這里我只是模擬登陸使用的一個(gè)類,僅供大家參考:1. tocol; 2. 3. importorg.json.JSONObject; 4. 5. importcom.jclick.bean.User; 6. 7. publicclassLoginProtocolextendsBaseProtocol 8. 9. privatefinal
37、staticStringURL="http:/localhost:8080/test/login" 10. 11. publicbooleancheckLogin(Userusr) 12. try 13. pack(URL); 14. parse(); 15. JSONObjectobj=this.getJSON(); 16. if(obj.getString("result").equals("failed") 17. returnfal
38、se; 18. else 19. returntrue; 20. 21. catch(Exceptione) 22. e.printStackTrace(); 23. returnfalse; 24. 25. 26. 27. 28. 29. tocol; 30. 31. importorg.json.JSONObject; 32. 33. importcom.jc
39、lick.bean.User; 34. 35. publicclassLoginProtocolextendsBaseProtocol 36. 37. privatefinalstaticStringURL="http:/localhost:8080/test/login" 38. 39. publicbool
40、eancheckLogin(Userusr) 40. try 41. pack(URL); 42. parse(); 43.
41、60; JSONObjectobj=this.getJSON(); 44. if(obj.getString("result").equals("failed") 45.
42、60; returnfalse; 46. else 47. returntrue; 48.
43、60; 49. catch(Exceptione) 50. e.printStackTrace(); 51. retur
44、nfalse; 52. 53. 54. 55. 然后是User實(shí)體類,主要用于保存用戶信息: 1. packagecom.jclick.bean; 2. 3. publicclassUser 4. privateStringusername; 5. privateStringpassword; 6. publicStri
45、nggetUsername() 7. returnusername; 8. 9. publicvoidsetUsername(Stringusername) 10. this.username=username; 11. 12. publicStringgetPassword() 13. returnpassword; 14. 15. publicvoidsetPassword(Stringpassword) 16. this.password=password;
46、;17. 18. 19. 20. 21. packagecom.jclick.bean; 22. 23. publicclassUser 24. privateStringusername; 25. privateStringpassword; 26. publicStringgetUsername() 27.
47、; returnusername; 28. 29. publicvoidsetUsername(Stringusername) 30. this.username=username; 31. 32. &
48、#160; publicStringgetPassword() 33. returnpassword; 34. 35. publicvoidsetPassword(Stringpassword) 36. this.password=password;
49、 37. 38. 39. 最后就是LoginActivity里邊判斷登陸的代碼了,詳細(xì)代碼不再貼出來了,僅貼一個(gè)判斷登陸的代碼:1. privatevoidcheckedData() 2. username=(EditText)findViewById(R.id.username).getText().toString(); 3. password=(EditText)findViewById(R.id.password).getText().toString();
50、0;4. 5. Useruser=newUser(); 6. user.setUsername(username); 7. user.setPassword(password); 8. LoginProtocollogin=newLoginProtocol(); 9. booleanresult=login.checkLogin(user); 10. 11. if(result)SpiderCache.getInstance().setUserSession(user); 12. Toast.mak
51、eText(getApplicationContext(),"登錄成功",1000).show(); 13. Intentintent=newIntent(); 14. intent.setClass(LoginActivity.this,WelcomeActivity.class); 15. startActivity(intent); 16. elseToast.makeText(LoginActivity.this,"密碼或用戶名不匹配,請重新輸入!",1000).show(); 17.
52、 18. 19. 20. privatevoidcheckedData() 21. username=(EditText)findViewById(R.id.username).getText().toString(); 22.
53、 password=(EditText)findViewById(R.id.password).getText().toString(); 23. 24. Useruser=newUser(); 25.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 老人護(hù)理課件教學(xué)
- 老人和兒童的課件
- 美術(shù)教學(xué)課件兒童
- 繼電保護(hù)技能培訓(xùn)課件
- 道路安全教育心得體會800字
- 安全檢查工崗位安全生產(chǎn)責(zé)任制
- 美術(shù)兒童課件大綱
- 施工安全檢查制度
- 安全生產(chǎn)責(zé)任險(xiǎn) 費(fèi)率
- 2025年科普工作計(jì)劃
- 農(nóng)業(yè)托管經(jīng)營協(xié)議書
- 腫瘤內(nèi)科病案質(zhì)量管理
- 2025年高考語文備考之考綱規(guī)定實(shí)詞200文言實(shí)詞課內(nèi)出處注解匯編
- 2024年7月黑龍江省普通高中學(xué)業(yè)水平合格性考試生物試卷(含答案)
- 《氣象學(xué)與氣候?qū)W期末考試試卷》
- 2025年中國純氯化錳市場調(diào)查研究報(bào)告
- 2025年全國寄生蟲病防治技能知識競賽參考試題庫及答案
- 湖南炎德·英才大聯(lián)考長郡中學(xué)2025屆模擬試卷(一)語文+答案
- 英語四級考試大綱詞匯【全本】
- 高中物理課程標(biāo)準(zhǔn)介紹
- 2025年國家金融監(jiān)督管理總局考試-財(cái)經(jīng)崗真題及答案
評論
0/150
提交評論