![項(xiàng)目4任務(wù)6-APP的用戶(hù)注冊(cè)功能_第1頁(yè)](http://file4.renrendoc.com/view/db55d2e8b23c5152633c8f7847ebd4ed/db55d2e8b23c5152633c8f7847ebd4ed1.gif)
![項(xiàng)目4任務(wù)6-APP的用戶(hù)注冊(cè)功能_第2頁(yè)](http://file4.renrendoc.com/view/db55d2e8b23c5152633c8f7847ebd4ed/db55d2e8b23c5152633c8f7847ebd4ed2.gif)
![項(xiàng)目4任務(wù)6-APP的用戶(hù)注冊(cè)功能_第3頁(yè)](http://file4.renrendoc.com/view/db55d2e8b23c5152633c8f7847ebd4ed/db55d2e8b23c5152633c8f7847ebd4ed3.gif)
![項(xiàng)目4任務(wù)6-APP的用戶(hù)注冊(cè)功能_第4頁(yè)](http://file4.renrendoc.com/view/db55d2e8b23c5152633c8f7847ebd4ed/db55d2e8b23c5152633c8f7847ebd4ed4.gif)
![項(xiàng)目4任務(wù)6-APP的用戶(hù)注冊(cè)功能_第5頁(yè)](http://file4.renrendoc.com/view/db55d2e8b23c5152633c8f7847ebd4ed/db55d2e8b23c5152633c8f7847ebd4ed5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2相關(guān)知識(shí)34任務(wù)小結(jié)與練習(xí)1任務(wù)實(shí)施任務(wù)引入與目標(biāo)APP的用戶(hù)注冊(cè)功能一、任務(wù)引入與目標(biāo)任務(wù)引入有了任務(wù)5中Node-RED對(duì)數(shù)據(jù)庫(kù)操作的基礎(chǔ)之后,我們就可以設(shè)計(jì)APP的用戶(hù)注冊(cè)功能了。注冊(cè)功能的關(guān)鍵是APP中HTTP客戶(hù)端和Node-RED中Web服務(wù)器之間的HTTP通信,以及Node-RED對(duì)數(shù)據(jù)表的查詢(xún)和增加操作。任務(wù)目標(biāo)任務(wù)6將實(shí)現(xiàn):(1)在APP中點(diǎn)擊btn12按鈕,彈出自定義對(duì)話框;(2)在對(duì)話框中輸入要注冊(cè)的用戶(hù)名和密碼,通過(guò)HTTP客戶(hù)端向Web服務(wù)器發(fā)送POST方式的請(qǐng)求;(3)Web服務(wù)器接收到請(qǐng)求后,查詢(xún)用戶(hù)表中是否已存在用戶(hù)名并發(fā)回response,如不存在則往用戶(hù)表增加一條記錄(即注冊(cè)功能);(4)APP的HTTP客戶(hù)端收到HTTPresponse后,Toast注冊(cè)成功與否的提示信息。二、相關(guān)知識(shí)常用的MySQL索引索引是數(shù)據(jù)庫(kù)中的一種數(shù)據(jù)結(jié)構(gòu),它可以提高查詢(xún)和排序的速度,并且加速對(duì)表的訪問(wèn)。MySQL支持多種類(lèi)型的索引,以下是一些常用的MySQL索引:(1)主鍵索引是唯一的索引,用于確保表中每行數(shù)據(jù)的唯一性,可以提供快速的數(shù)據(jù)查詢(xún)和排序;(2)唯一索引也用于確保表中每行數(shù)據(jù)的唯一性,但允許空值,與主鍵索引不同,唯一索引可以有多個(gè);(3)普通索引是最基本的索引類(lèi)型,它沒(méi)有任何約束條件,可以用于快速查詢(xún)和排序;(4)全文索引是一種特殊的索引類(lèi)型,它可以用于全文搜索和匹配文本內(nèi)容,而不是只能用于精確匹配;(5)組合索引是將多個(gè)列作為一個(gè)索引來(lái)創(chuàng)建的,可以提高多列聯(lián)合查詢(xún)和排序的速度。需要注意的是,盡管索引可以提高查詢(xún)和排序的速度,但過(guò)多的索引會(huì)使寫(xiě)入操作變慢并占用更多的磁盤(pán)空間。因此,在設(shè)計(jì)和使用索引時(shí),我們應(yīng)該權(quán)衡查詢(xún)和寫(xiě)入操作的比例,并根據(jù)具體場(chǎng)景選擇適當(dāng)?shù)乃饕?lèi)型和數(shù)量。二、相關(guān)知識(shí)如何實(shí)現(xiàn)APP的用戶(hù)注冊(cè)功能實(shí)現(xiàn)APP的用戶(hù)注冊(cè)功能需要在客戶(hù)端和服務(wù)器端分別編寫(xiě)代碼??蛻?hù)端:首先在APP中添加用戶(hù)注冊(cè)界面,并采集用戶(hù)輸入的基本信息,如用戶(hù)名、密碼、電子郵件地址等;然后對(duì)用戶(hù)輸入的信息進(jìn)行驗(yàn)證和校驗(yàn),確保數(shù)據(jù)的正確性和完整性;最后將用戶(hù)輸入的信息封裝成一個(gè)請(qǐng)求對(duì)象,并通過(guò)HTTP協(xié)議發(fā)送到服務(wù)器端。服務(wù)器端:首先接收來(lái)自客戶(hù)端的用戶(hù)注冊(cè)請(qǐng)求,并解析請(qǐng)求參數(shù);然后對(duì)用戶(hù)輸入的信息進(jìn)行服務(wù)器端驗(yàn)證和校驗(yàn),包括用戶(hù)名是否已經(jīng)存在、密碼復(fù)雜度是否夠高等;如果數(shù)據(jù)驗(yàn)證通過(guò),則將用戶(hù)注冊(cè)信息保存到數(shù)據(jù)庫(kù)中,并返回注冊(cè)成功響應(yīng)給客戶(hù)端??蛻?hù)端:根據(jù)服務(wù)器的響應(yīng)結(jié)果,在注冊(cè)頁(yè)面上顯示注冊(cè)成功或失敗。需要注意的是,為了保證用戶(hù)數(shù)據(jù)的安全和隱私,用戶(hù)注冊(cè)信息應(yīng)該使用加密技術(shù)進(jìn)行傳輸和存儲(chǔ),還可以采用驗(yàn)證碼、第三方登錄、手機(jī)號(hào)碼綁定等方式增強(qiáng)用戶(hù)注冊(cè)的安全性。課堂討論如果不考慮安全性,是否可以不使用服務(wù)器端,僅僅在客戶(hù)端實(shí)現(xiàn)APP的注冊(cè)功能?三、任務(wù)實(shí)施實(shí)施設(shè)備部署了AndroidStudio、MySQL、Node-RED開(kāi)發(fā)環(huán)境的計(jì)算機(jī)。實(shí)施過(guò)程1.APP設(shè)計(jì)(1)btn12按鈕的單擊事件監(jiān)聽(tīng)。btn12按鈕在第一個(gè)頁(yè)面的布局如圖4-88所示。在第一個(gè)頁(yè)面的活動(dòng)文件MainActivity.java編寫(xiě)btn12按鈕的事件監(jiān)聽(tīng)方法,如圖4-89所示。圖4-88btn12的布局圖4-89btn12按鈕的事件監(jiān)聽(tīng)三、任務(wù)實(shí)施(2)實(shí)現(xiàn)對(duì)話框功能。定義兩個(gè)變量:privateStringuserNameReg;privateStringpassWordReg;對(duì)話框代碼:以上代碼會(huì)調(diào)出2個(gè)輸入框。點(diǎn)擊“確定”按鈕,將輸入框的內(nèi)容取出,分別賦值給變量userName和passWord。接下來(lái)以post的方式、HTTP請(qǐng)求提交給后臺(tái)。publicvoidonClick(Viewview){//容器layout:線性布局,包括2個(gè)輸入框LinearLayoutlayout=newLinearLayout(MainActivity.this);layout.setOrientation(LinearLayout.VERTICAL);finalEditTextet1=newEditText(MainActivity.this);et1.setText("用戶(hù)名:");layout.addView(et1);finalEditTextet2=newEditText(MainActivity.this);et2.setText("密碼:");layout.addView(et2);//對(duì)話框:由Title、2個(gè)輸入框、確定按鈕、取消按鈕組成AlertDialogalertDialog=newAlertDialog.Builder(MainActivity.this).setTitle("請(qǐng)輸入用戶(hù)名和密碼")//標(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請(qǐng)求與接收響應(yīng)。添加OkHttp框架、網(wǎng)絡(luò)權(quán)限配置等,在之前的項(xiàng)目中已經(jīng)完成。創(chuàng)建HTTP客戶(hù)端對(duì)象,如圖4-90所示。編寫(xiě)一個(gè)異步請(qǐng)求函數(shù),在對(duì)話框確定按鈕中調(diào)用執(zhí)行。所謂的異步請(qǐng)求,就是把請(qǐng)求加入enqueue(隊(duì)列)中,等待執(zhí)行。將在異步請(qǐng)求函數(shù)中用POST方法。圖4-90創(chuàng)建HTTP客戶(hù)端對(duì)象//異步請(qǐng)求函數(shù)privatevoidRegPost_es(){//創(chuàng)建表單FormBodyformBody=newFormBody.Builder().add("username",userNameReg).add("password",passWordReg).build();三、任務(wù)實(shí)施//表單數(shù)據(jù)放在request中,通過(guò)post方法提交Requestrequest=newRequest.Builder().url("11:1880/APP_register").post(formBody).build();//將客戶(hù)端加入隊(duì)列中,會(huì)自動(dòng)在子線程中運(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出來(lái)runOnUiThread(newRunnable(){@Overridepublicvoidrun(){if(result.equals("SuccessRegistration")){Toast.makeText(MainActivity.this,"恭喜,注冊(cè)成功!",Toast.LENGTH_SHORT).show();}elseif(result.equals("UsernameExists")){Toast.makeText(MainActivity.this,"用戶(hù)名已存在,請(qǐng)重新注冊(cè)!",Toast.LENGTH_SHORT).show();}else{Toast.makeText(MainActivity.this,"未知錯(cuò)誤!",Toast.LENGTH_SHORT).show();}}});}});}三、任務(wù)實(shí)施另外,調(diào)用函數(shù)RegPost_es,如圖4-91所示。其中,11為Node-RED所部署的電腦在局域網(wǎng)中的IP地址。查詢(xún)IP地址的方法為cmd命令行,輸入:ipconfig。如果沒(méi)有收到response,打印異常信息;如果收到response,根據(jù)情況,Toast出注冊(cè)成功或失敗的信息。至此,APP設(shè)計(jì)就完成了,接下來(lái)設(shè)計(jì)數(shù)據(jù)庫(kù)以及Node-RED的流程。圖4-91調(diào)用函數(shù)RegPost_es三、任務(wù)實(shí)施2.數(shù)據(jù)庫(kù)設(shè)計(jì)登錄MySQL,如圖4-92所示,在數(shù)據(jù)庫(kù)node_red_test中創(chuàng)建數(shù)據(jù)表user,共3個(gè)字段:id、username、password。如圖4-93所示,將id設(shè)為主鍵,保存。記錄為0條,如圖4-94所示。圖4-92創(chuàng)建數(shù)據(jù)表user圖4-94查詢(xún)數(shù)據(jù)記錄圖4-93創(chuàng)建主鍵索引三、任務(wù)實(shí)施3.Node-RED設(shè)計(jì)(1)流程_查詢(xún)用戶(hù)。如圖4-95所示設(shè)計(jì)流程,由4個(gè)節(jié)點(diǎn)組成,分別是httpin(Web服務(wù)器)、function1(獲取表單數(shù)據(jù))、function2(編寫(xiě)SQL查詢(xún)語(yǔ)句)、mysql(數(shù)據(jù)庫(kù))。為了調(diào)試,另外添加3個(gè)debug節(jié)點(diǎn)。圖4-95查詢(xún)用戶(hù)流程圖4-96編輯httpin節(jié)點(diǎn)配置httpin節(jié)點(diǎn),如圖4-96所示。三、任務(wù)實(shí)施獲取表單數(shù)據(jù)節(jié)點(diǎn)配置,如圖4-97所示。如圖4-98所示,編輯SQL語(yǔ)句節(jié)點(diǎn),語(yǔ)句:select*from
"user"where"username"="admin"。mysql節(jié)點(diǎn)的配置如圖4-99所示。圖4-98編輯SQL語(yǔ)句節(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的注冊(cè)按鈕,在對(duì)話框中輸入用戶(hù)名和密碼,點(diǎn)擊確定。Node-RED打印調(diào)試信息,效果如圖4-101所示??梢?jiàn),我們能夠成功根據(jù)提交的用戶(hù)名查詢(xún)數(shù)據(jù)庫(kù),但數(shù)據(jù)庫(kù)返回結(jié)果為空。這是因?yàn)閿?shù)據(jù)表user的數(shù)據(jù)就是空的。圖4-100APP提交用戶(hù)名和密碼圖4-101Node-RED打印調(diào)試信息三、任務(wù)實(shí)施如果前面查詢(xún)不到記錄,則可在數(shù)據(jù)庫(kù)中增加一條記錄(insert),即注冊(cè)功能。流程如圖4-102所示。在上個(gè)流程的基礎(chǔ)上,根據(jù)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果判斷是否已存在用戶(hù)名:若已存在,則向APP的HTTP客戶(hù)端回復(fù)“UsernameExists”;若不存在,則編寫(xiě)增加SQL語(yǔ)句,連接數(shù)據(jù)庫(kù)執(zhí)行insert操作,并向APP的HTTP客戶(hù)端回復(fù)“SuccessRegistration”。如圖4-103所示,在“獲取用戶(hù)名和密碼”函數(shù)節(jié)點(diǎn),增加2個(gè)在flow內(nèi)使用的全局變量,后邊的“insertuser”的節(jié)點(diǎn)要用到。圖4-102注冊(cè)用戶(hù)流程圖4-103編輯function節(jié)點(diǎn)三、任務(wù)實(shí)施switch節(jié)點(diǎn)判斷查詢(xún)結(jié)果里id字段的值是否為空,即數(shù)據(jù)表中是否有同名字段,如圖4-104所示。如圖4-105所示,在change節(jié)點(diǎn)編輯response內(nèi)容,送給httpresponse節(jié)點(diǎn)(response內(nèi)容將發(fā)還請(qǐng)求客戶(hù)端),告知用戶(hù)名已存在。圖4-104編輯switch節(jié)點(diǎn)圖4-105編輯change節(jié)點(diǎn)三、任務(wù)實(shí)施如圖4-106所示,“insertuser”函數(shù)節(jié)點(diǎn)會(huì)獲取全局變量“username”和“password”的值,用在SQL語(yǔ)句的編寫(xiě)過(guò)程中。如圖4-107所示,告知APP的HTTP客戶(hù)端注冊(cè)成功。圖4-106編輯insertuser節(jié)點(diǎn)圖4-107編輯成功回復(fù)的change節(jié)點(diǎn)三、任務(wù)實(shí)施4.結(jié)果測(cè)試部署流程。根據(jù)APP提交的用戶(hù)名和數(shù)據(jù)表中存在的用戶(hù)名匹配情況,可能用戶(hù)注冊(cè)成功,也可能注冊(cè)失敗。(1)注冊(cè)成功的情況。如圖4-108所示,在APP的注冊(cè)按鈕調(diào)出的對(duì)話框中輸入用戶(hù)名和密碼,Toast“恭喜,注冊(cè)成功”。如果原來(lái)數(shù)據(jù)庫(kù)不存在,就會(huì)添加進(jìn)去
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 美食行業(yè)廚師助理工作總結(jié)
- 質(zhì)量管理在研發(fā)流程中的作用培訓(xùn)
- 藥店衛(wèi)生整頓要領(lǐng)
- 部編初中歷史八下第17課外交事業(yè)的發(fā)展教案
- 2025年全球及中國(guó)商用儲(chǔ)水式熱水器行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)推拉式酸洗線行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球第三人稱(chēng)射擊游戲行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)新能源汽車(chē)隱形門(mén)把手行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球基于人工智能的傷口護(hù)理軟件行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)高舉裝載機(jī)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 長(zhǎng)江委水文局2025年校園招聘17人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年湖南韶山干部學(xué)院公開(kāi)招聘15人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 智研咨詢(xún)發(fā)布:2024年中國(guó)MVR蒸汽機(jī)械行業(yè)市場(chǎng)全景調(diào)查及投資前景預(yù)測(cè)報(bào)告
- IF鋼物理冶金原理與關(guān)鍵工藝技術(shù)1
- JGJ46-2024 建筑與市政工程施工現(xiàn)場(chǎng)臨時(shí)用電安全技術(shù)標(biāo)準(zhǔn)
- 煙花爆竹重大危險(xiǎn)源辨識(shí)AQ 4131-2023知識(shí)培訓(xùn)
- 銷(xiāo)售提成對(duì)賭協(xié)議書(shū)范本 3篇
- EPC項(xiàng)目階段劃分及工作結(jié)構(gòu)分解方案
- 《跨學(xué)科實(shí)踐活動(dòng)4 基于特定需求設(shè)計(jì)和制作簡(jiǎn)易供氧器》教學(xué)設(shè)計(jì)
- 2024-2030年汽車(chē)啟停電池市場(chǎng)運(yùn)行態(tài)勢(shì)分析及競(jìng)爭(zhēng)格局展望報(bào)告
- 術(shù)后病人燙傷不良事件PDCA循環(huán)分析
評(píng)論
0/150
提交評(píng)論