項(xiàng)目4任務(wù)6-APP的用戶注冊功能_第1頁
項(xiàng)目4任務(wù)6-APP的用戶注冊功能_第2頁
項(xiàng)目4任務(wù)6-APP的用戶注冊功能_第3頁
項(xiàng)目4任務(wù)6-APP的用戶注冊功能_第4頁
項(xiàng)目4任務(wù)6-APP的用戶注冊功能_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2相關(guān)知識34任務(wù)小結(jié)與練習(xí)1任務(wù)實(shí)施任務(wù)引入與目標(biāo)APP的用戶注冊功能一、任務(wù)引入與目標(biāo)任務(wù)引入有了任務(wù)5中Node-RED對數(shù)據(jù)庫操作的基礎(chǔ)之后,我們就可以設(shè)計(jì)APP的用戶注冊功能了。注冊功能的關(guān)鍵是APP中HTTP客戶端和Node-RED中Web服務(wù)器之間的HTTP通信,以及Node-RED對數(shù)據(jù)表的查詢和增加操作。任務(wù)目標(biāo)任務(wù)6將實(shí)現(xiàn):(1)在APP中點(diǎn)擊btn12按鈕,彈出自定義對話框;(2)在對話框中輸入要注冊的用戶名和密碼,通過HTTP客戶端向Web服務(wù)器發(fā)送POST方式的請求;(3)Web服務(wù)器接收到請求后,查詢用戶表中是否已存在用戶名并發(fā)回response,如不存在則往用戶表增加一條記錄(即注冊功能);(4)APP的HTTP客戶端收到HTTPresponse后,Toast注冊成功與否的提示信息。二、相關(guān)知識常用的MySQL索引索引是數(shù)據(jù)庫中的一種數(shù)據(jù)結(jié)構(gòu),它可以提高查詢和排序的速度,并且加速對表的訪問。MySQL支持多種類型的索引,以下是一些常用的MySQL索引:(1)主鍵索引是唯一的索引,用于確保表中每行數(shù)據(jù)的唯一性,可以提供快速的數(shù)據(jù)查詢和排序;(2)唯一索引也用于確保表中每行數(shù)據(jù)的唯一性,但允許空值,與主鍵索引不同,唯一索引可以有多個;(3)普通索引是最基本的索引類型,它沒有任何約束條件,可以用于快速查詢和排序;(4)全文索引是一種特殊的索引類型,它可以用于全文搜索和匹配文本內(nèi)容,而不是只能用于精確匹配;(5)組合索引是將多個列作為一個索引來創(chuàng)建的,可以提高多列聯(lián)合查詢和排序的速度。需要注意的是,盡管索引可以提高查詢和排序的速度,但過多的索引會使寫入操作變慢并占用更多的磁盤空間。因此,在設(shè)計(jì)和使用索引時,我們應(yīng)該權(quán)衡查詢和寫入操作的比例,并根據(jù)具體場景選擇適當(dāng)?shù)乃饕愋秃蛿?shù)量。二、相關(guān)知識如何實(shí)現(xiàn)APP的用戶注冊功能實(shí)現(xiàn)APP的用戶注冊功能需要在客戶端和服務(wù)器端分別編寫代碼。客戶端:首先在APP中添加用戶注冊界面,并采集用戶輸入的基本信息,如用戶名、密碼、電子郵件地址等;然后對用戶輸入的信息進(jìn)行驗(yàn)證和校驗(yàn),確保數(shù)據(jù)的正確性和完整性;最后將用戶輸入的信息封裝成一個請求對象,并通過HTTP協(xié)議發(fā)送到服務(wù)器端。服務(wù)器端:首先接收來自客戶端的用戶注冊請求,并解析請求參數(shù);然后對用戶輸入的信息進(jìn)行服務(wù)器端驗(yàn)證和校驗(yàn),包括用戶名是否已經(jīng)存在、密碼復(fù)雜度是否夠高等;如果數(shù)據(jù)驗(yàn)證通過,則將用戶注冊信息保存到數(shù)據(jù)庫中,并返回注冊成功響應(yīng)給客戶端??蛻舳?根據(jù)服務(wù)器的響應(yīng)結(jié)果,在注冊頁面上顯示注冊成功或失敗。需要注意的是,為了保證用戶數(shù)據(jù)的安全和隱私,用戶注冊信息應(yīng)該使用加密技術(shù)進(jìn)行傳輸和存儲,還可以采用驗(yàn)證碼、第三方登錄、手機(jī)號碼綁定等方式增強(qiáng)用戶注冊的安全性。課堂討論如果不考慮安全性,是否可以不使用服務(wù)器端,僅僅在客戶端實(shí)現(xiàn)APP的注冊功能?三、任務(wù)實(shí)施實(shí)施設(shè)備部署了AndroidStudio、MySQL、Node-RED開發(fā)環(huán)境的計(jì)算機(jī)。實(shí)施過程1.APP設(shè)計(jì)(1)btn12按鈕的單擊事件監(jiān)聽。btn12按鈕在第一個頁面的布局如圖4-88所示。在第一個頁面的活動文件MainActivity.java編寫btn12按鈕的事件監(jiān)聽方法,如圖4-89所示。圖4-88btn12的布局圖4-89btn12按鈕的事件監(jiān)聽三、任務(wù)實(shí)施(2)實(shí)現(xiàn)對話框功能。定義兩個變量:privateStringuserNameReg;privateStringpassWordReg;對話框代碼:以上代碼會調(diào)出2個輸入框。點(diǎn)擊“確定”按鈕,將輸入框的內(nèi)容取出,分別賦值給變量userName和passWord。接下來以post的方式、HTTP請求提交給后臺。publicvoidonClick(Viewview){//容器layout:線性布局,包括2個輸入框LinearLayoutlayout=newLinearLayout(MainActivity.this);layout.setOrientation(LinearLayout.VERTICAL);finalEditTextet1=newEditText(MainActivity.this);et1.setText("用戶名:");layout.addView(et1);finalEditTextet2=newEditText(MainActivity.this);et2.setText("密碼:");layout.addView(et2);//對話框:由Title、2個輸入框、確定按鈕、取消按鈕組成AlertDialogalertDialog=newAlertDialog.Builder(MainActivity.this).setTitle("請輸入用戶名和密碼")//標(biāo)題.setView(layout)//輸入框et1和et2.setPositiveButton("確定",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialogInterface,inti){userNameReg=et1.getText().toString();passWordReg=et2.getText().toString();}}).setNegativeButton("取消",null).show();}三、任務(wù)實(shí)施(3)提交HTPP請求與接收響應(yīng)。添加OkHttp框架、網(wǎng)絡(luò)權(quán)限配置等,在之前的項(xiàng)目中已經(jīng)完成。創(chuàng)建HTTP客戶端對象,如圖4-90所示。編寫一個異步請求函數(shù),在對話框確定按鈕中調(diào)用執(zhí)行。所謂的異步請求,就是把請求加入enqueue(隊(duì)列)中,等待執(zhí)行。將在異步請求函數(shù)中用POST方法。圖4-90創(chuàng)建HTTP客戶端對象//異步請求函數(shù)privatevoidRegPost_es(){//創(chuàng)建表單FormBodyformBody=newFormBody.Builder().add("username",userNameReg).add("password",passWordReg).build();三、任務(wù)實(shí)施//表單數(shù)據(jù)放在request中,通過post方法提交Requestrequest=newRequest.Builder().url("11:1880/APP_register").post(formBody).build();//將客戶端加入隊(duì)列中,會自動在子線程中運(yùn)行,返回有2種情況:失敗或者有響應(yīng)okHttpClient.newCall(request).enqueue(newCallback(){@OverridepublicvoidonFailure(@NonNullCallcall,@NonNullIOExceptione){e.printStackTrace();}@OverridepublicvoidonResponse(@NonNullCallcall,@NonNullResponseresponse)throwsIOException{//獲取響應(yīng)的數(shù)據(jù)部分Stringresult=response.body().string();//根據(jù)response,在主線程中Toast出來runOnUiThread(newRunnable(){@Overridepublicvoidrun(){if(result.equals("SuccessRegistration")){Toast.makeText(MainActivity.this,"恭喜,注冊成功!",Toast.LENGTH_SHORT).show();}elseif(result.equals("UsernameExists")){Toast.makeText(MainActivity.this,"用戶名已存在,請重新注冊!",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,"未知錯誤!",Toast.LENGTH_SHORT).show();}}});}});}三、任務(wù)實(shí)施另外,調(diào)用函數(shù)RegPost_es,如圖4-91所示。其中,11為Node-RED所部署的電腦在局域網(wǎng)中的IP地址。查詢IP地址的方法為cmd命令行,輸入:ipconfig。如果沒有收到response,打印異常信息;如果收到response,根據(jù)情況,Toast出注冊成功或失敗的信息。至此,APP設(shè)計(jì)就完成了,接下來設(shè)計(jì)數(shù)據(jù)庫以及Node-RED的流程。圖4-91調(diào)用函數(shù)RegPost_es三、任務(wù)實(shí)施2.數(shù)據(jù)庫設(shè)計(jì)登錄MySQL,如圖4-92所示,在數(shù)據(jù)庫node_red_test中創(chuàng)建數(shù)據(jù)表user,共3個字段:id、username、password。如圖4-93所示,將id設(shè)為主鍵,保存。記錄為0條,如圖4-94所示。圖4-92創(chuàng)建數(shù)據(jù)表user圖4-94查詢數(shù)據(jù)記錄圖4-93創(chuàng)建主鍵索引三、任務(wù)實(shí)施3.Node-RED設(shè)計(jì)(1)流程_查詢用戶。如圖4-95所示設(shè)計(jì)流程,由4個節(jié)點(diǎn)組成,分別是httpin(Web服務(wù)器)、function1(獲取表單數(shù)據(jù))、function2(編寫SQL查詢語句)、mysql(數(shù)據(jù)庫)。為了調(diào)試,另外添加3個debug節(jié)點(diǎn)。圖4-95查詢用戶流程圖4-96編輯httpin節(jié)點(diǎn)配置httpin節(jié)點(diǎn),如圖4-96所示。三、任務(wù)實(shí)施獲取表單數(shù)據(jù)節(jié)點(diǎn)配置,如圖4-97所示。如圖4-98所示,編輯SQL語句節(jié)點(diǎn),語句:select*from

"user"where"username"="admin"。mysql節(jié)點(diǎn)的配置如圖4-99所示。圖4-98編輯SQL語句節(jié)點(diǎn)圖4-99編輯mysql節(jié)點(diǎn)圖4-97編輯function節(jié)點(diǎn)三、任務(wù)實(shí)施部署流程3,手機(jī)運(yùn)行APP,如圖4-100所示。點(diǎn)擊APP的注冊按鈕,在對話框中輸入用戶名和密碼,點(diǎn)擊確定。Node-RED打印調(diào)試信息,效果如圖4-101所示??梢?我們能夠成功根據(jù)提交的用戶名查詢數(shù)據(jù)庫,但數(shù)據(jù)庫返回結(jié)果為空。這是因?yàn)閿?shù)據(jù)表user的數(shù)據(jù)就是空的。圖4-100APP提交用戶名和密碼圖4-101Node-RED打印調(diào)試信息三、任務(wù)實(shí)施如果前面查詢不到記錄,則可在數(shù)據(jù)庫中增加一條記錄(insert),即注冊功能。流程如圖4-102所示。在上個流程的基礎(chǔ)上,根據(jù)數(shù)據(jù)庫查詢結(jié)果判斷是否已存在用戶名:若已存在,則向APP的HTTP客戶端回復(fù)“UsernameExists”;若不存在,則編寫增加SQL語句,連接數(shù)據(jù)庫執(zhí)行insert操作,并向APP的HTTP客戶端回復(fù)“SuccessRegistration”。如圖4-103所示,在“獲取用戶名和密碼”函數(shù)節(jié)點(diǎn),增加2個在flow內(nèi)使用的全局變量,后邊的“insertuser”的節(jié)點(diǎn)要用到。圖4-102注冊用戶流程圖4-103編輯function節(jié)點(diǎn)三、任務(wù)實(shí)施switch節(jié)點(diǎn)判斷查詢結(jié)果里id字段的值是否為空,即數(shù)據(jù)表中是否有同名字段,如圖4-104所示。如圖4-105所示,在change節(jié)點(diǎn)編輯response內(nèi)容,送給httpresponse節(jié)點(diǎn)(response內(nèi)容將發(fā)還請求客戶端),告知用戶名已存在。圖4-104編輯switch節(jié)點(diǎn)圖4-105編輯change節(jié)點(diǎn)三、任務(wù)實(shí)施如圖4-106所示,“insertuser”函數(shù)節(jié)點(diǎn)會獲取全局變量“username”和“password”的值,用在SQL語句的編寫過程中。如圖4-107所示,告知APP的HTTP客戶端注冊成功。圖4-106編輯insertuser節(jié)點(diǎn)圖4-107編輯成功回復(fù)的change節(jié)點(diǎn)三、任務(wù)實(shí)施4.結(jié)果測試部署流程。根據(jù)APP提交的用戶名和數(shù)據(jù)表中存在的用戶名匹配情況,可能用戶注冊成功,也可能注冊失敗。(1)注冊成功的情況。如圖4-108所示,在APP的注冊按鈕調(diào)出的對話框中輸入用戶名和密碼,Toast“恭喜,注冊成功”。如果原來數(shù)據(jù)庫不存在,就會添加進(jìn)去

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論