項目4 基于Node-RED 的物聯(lián)網前后端設計_第1頁
項目4 基于Node-RED 的物聯(lián)網前后端設計_第2頁
項目4 基于Node-RED 的物聯(lián)網前后端設計_第3頁
項目4 基于Node-RED 的物聯(lián)網前后端設計_第4頁
項目4 基于Node-RED 的物聯(lián)網前后端設計_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2相關知識34任務小結與練習1任務實施任務引入與目標Node-RED安裝與認識一、任務引入與目標任務目標任務1將安裝Node-RED開發(fā)環(huán)境,并編寫一個簡單的流程來認識Node-RED,為接下來完整物聯(lián)網系統(tǒng)的前后端設計做準備。任務引入一個系統(tǒng)中,物聯(lián)網功能只是一部分,而物聯(lián)網部分和其他部分有較大的區(qū)別,它和硬件結合比較緊密。針對系統(tǒng)前、后端的設計,有沒有適合構建物聯(lián)網應用程序的強大工具,可以滿足快速連接硬件和設備到Web服務呢?二、相關知識什么是Node-REDNode-RED最初是IBM公司在2013年年末開發(fā)的一個開源項目,以滿足其快速連接硬件和設備到Web服務和其他軟件的需求。作為物聯(lián)網的一種黏合劑,Node-RED很快發(fā)展成為一種通用的物聯(lián)網編程工具。雖然Node-RED最初是用來處理物聯(lián)網的應用,也就是說,它與現(xiàn)實世界交互和控制設備,但隨著它的發(fā)展,它已經成為一個較為開放的物聯(lián)網開發(fā)工具。Node-RED編程方法Node-RED是構建物聯(lián)網應用程序的一個強大工具,其重點是簡化代碼塊的“連接”以執(zhí)行任務。它使用可視化編程方法,允許開發(fā)人員將預定義的代碼塊(稱為“節(jié)點”,Node)連接起來執(zhí)行任務。連接的節(jié)點,通常是輸入節(jié)點、處理節(jié)點和輸出節(jié)點的組合,當它們連接在一起時,構成一個“流”(Flows)。課堂討論你使用過哪些可視化編程軟件?三、任務實施實施設備安裝了Windows操作系統(tǒng)的計算機。實施過程1.Node.js安裝在官網(/en/)下載,如圖4-1所示。圖4-1下載Node.js雙擊安裝,然后選擇合適的安裝目錄,如圖4-2所示。圖4-2選擇合適的安裝目錄三、任務實施如圖4-3所示,在ToolsforNativeModules(本機模塊的工具)界面不選中方框,否則會下載全部工具到本機,速度比較慢。等待安裝完成。2.Node-RED安裝如圖4-4所示,進入cmd,輸入命令:npminstall-g--unsafe-permnode-red。等待安裝完成。圖4-3不選擇本機模塊的工具圖4-4安裝Node-RED三、任務實施3.啟動Node-RED如圖4-5所示,在cmd輸入node-red,即可啟動。如圖4-6所示,打開瀏覽器訪問Node-RED::1880。需要說明的是,是本機IP,或用localhost表示。如果處在局域網和廣域網中,可以在其他設備輸入對應的IP地址訪問。圖4-5啟動Node-RED圖4-6訪問Node-RED三、任務實施4.Node-RED節(jié)點如圖4-7所示,將左側的節(jié)點拖入中間編輯區(qū),以構建“流”。節(jié)點的功能可以在右側“幫助”欄查看。雙擊節(jié)點,即可對其進行編輯。比如inject節(jié)點,手動或定期將消息注入流中。消息的有效荷載可以有多種類型,包括字符串、JavaScript對象或當前時間。消息共有2個屬性:topic和payload。在最右側的設置菜單,點擊“節(jié)點管理”,可以安裝和查看節(jié)點,如處理json、郵件、mysql數(shù)據庫、存儲等幾類節(jié)點。圖4-7Node-RED的節(jié)點三、任務實施5.第一個Node-RED流程如圖4-8所示,使用2個節(jié)點,第一個是“inject”(注入)節(jié)點,第二個是“debug”(調試)節(jié)點。如圖4-9所示,第一個節(jié)點設置輸出消息的payload(載荷)為字符串“hello,world!”,每隔5秒執(zhí)行一次。圖4-8第一個Node-RED流程圖4-9編輯inject節(jié)點三、任務實施如圖4-10所示,第二個節(jié)點設置輸出消息的payload,消息的payload是由上一個節(jié)點輸入的。流編輯完成后,點擊“部署”按鈕,打開右邊的調試窗口(蟲子圖標),即可觀察debug節(jié)點打印的消息payload,如圖411所示。如果不想在調試窗口顯示打印內容,那么點擊debug節(jié)點右側的框即可。后面消息的payload盡量都是用JSON格式。圖4-10編輯debug節(jié)點圖4-11流程運行結果四、任務小結與練習任務小結任務1通過編寫一個簡單的流程,讓我們認識了Node-RED,為接下來實現(xiàn)完整的物聯(lián)網系統(tǒng)的前后端設計做準備。修改第一個Node-RED流程中inject節(jié)點的消息載荷為JSON對象格式,觀察debug節(jié)點打印的調試信息。實踐練習謝謝聆聽2相關知識34任務小結與練習1任務實施任務引入與目標Web展示網關上報的溫濕度一、任務引入與目標任務目標任務2通過Node-RED流程設計,接收網關上報的MQTT消息,將消息中溫濕度字段的值解析后,通過Web頁面展示出來。解析展示的過程,與APP中的設計很像,都需要掌握JSON解析的知識。注意,在任務2中,Node-RED創(chuàng)建了MQTT客戶端,與網關、APP中創(chuàng)建的MQTT客戶端的地位是相等的。網關用項目3中的程序,將周期上報間隔改為1分鐘,其他內容不變,包括消息的主題和消息的載荷。任務引入項目3將網關上報的MQTT消息經過解析,在APP上展示了溫濕度的值。有了Node-RED工具之后,我們也可以將硬件檢測的溫濕度值在Web上展示出來,這樣數(shù)據可視化的形式就更加豐富了。二、相關知識dashboard節(jié)點Node-RED中常用的圖形化節(jié)點叫做dashboard,它主要用于快速創(chuàng)建實時數(shù)據儀表板。在安裝節(jié)點的輸入框內輸入“dashboard”,找到名為“node-red-dashborad”的控件并點擊安裝即可。Web頁面布局總體來看,通過dashboard設計的Web頁面布局分為三級,分別是:tab、group、spacer。儀表板的布局依賴于tab和group屬性,tab可以理解為頁面,group是分組,spacer即控件。一個頁面里可以有多個分組,建議使用多個分組,而不是一個大組,因為dashboard可以根據頁面的大小動態(tài)調整分組的位置。三、任務實施實施設備部署了Node-RED和Arduino開發(fā)環(huán)境的計算機。網關和溫濕度傳感器各一個。實施過程1.Node-RED接收MQTT消息為了完成本任務中溫濕度顯示的功能,需要在Node-RED中創(chuàng)建MQTT客戶端,接收MQTT消息,設計流程如圖4-12所示。圖4-12打印溫濕度值流程三、任務實施流程中的2個節(jié)點,分別是mqttin(用于mqtt請求)和debug(用于打印調試信息)。對于mqttin節(jié)點,設置主題為網關上報的消息,如圖4-13所示。接下來在mqttin節(jié)點中設置要連接的MQTT服務器,如圖4-14所示。圖4-13編輯mqttin節(jié)點圖4-14編輯MQTT節(jié)點的服務器三、任務實施然后設置debug節(jié)點,輸出調試信息,如圖4-15所示。網關連接溫濕度傳感器,運行,使用的程序以及硬件連接與項目3保持一致,這里不再介紹。部署Node-RED流程,打開debug窗口,查看結果,如圖4-16所示。圖4-15編輯debug節(jié)點圖4-16打印調試結果三、任務實施2.Web頁面通過gauge展示溫度我們既可以用文本顯示消息載荷,也可以用圖表顯示網關上報的溫度值。將前面的節(jié)點設為無效,MQTT節(jié)點復制后還要再用。增加一個“switch”和“gauge”節(jié)點?!皊witch”判斷溫度解析值非空,即判斷MQTT消息中是否有“temperature”字段,如圖417所示。“gauge”放在“健康監(jiān)測中心”頁面(對應Web的一個菜單)的一個“溫度”組中。顯示的內容是{{msg.payload.temperature}},即提取消息載荷的temperature字段的值,如圖4-18所示。圖4-17編輯switch節(jié)點圖4-18編輯gauge節(jié)點三、任務實施結果如圖4-19所示。網址是:1880/ui,用的是本機IP;如果Node-RED應用服務器部署在公網,可通過公網IP訪問;如果部署在局域網,同一局域網里的計算機可以通過局域網IP訪問。可以發(fā)現(xiàn)采用了二次解析過程,第一次判斷非空,第二次再解析展示,與之前APP和網關對MQTT消息解析過程相同。二次解析過程可以避免以下情況:如果上報的是濕度消息,解析為空,展示錯誤圖4-19gauge展示環(huán)境溫度三、任務實施3.Web頁面通過折線圖展示溫度“健康監(jiān)測中心”頁面新增group,名稱為“溫度曲線”。流程中需要增加一個change和chart節(jié)點,如圖4-20所示。設置change節(jié)點的載荷(即輸出到chart節(jié)點的載荷),為輸入此節(jié)點的載荷的temperature的值,如圖4-21所示。圖4-20流程中增加溫度曲線圖4-21編輯change節(jié)點三、任務實施在chart節(jié)點中,設置顯示10分鐘的值。折線圖中的標簽為“十分鐘溫度變化”。范圍、顏色等根據喜好確定即可,如圖4-22所示。部署Node-RED流程,然后查看結果,如圖4-23所示。圖4-22編輯chart節(jié)點圖4-23gauge和chart顯示溫度三、任務實施關于UI布局,可以在tab的layout里進行設計,如圖4-24所示??梢栽O置寬度、高度及部件的相對位置,如圖4-25所示。圖4-24流程的UI布局圖4-26溫度監(jiān)控界面完成后重新部署,結果如圖4-26所示。圖4-25設置UI屬性三、任務實施4.Web頁面通過gauge、折線圖展示溫度、濕度參照溫度顯示,分別以儀表盤和折線圖的形式顯示網關上報的濕度值。流程如圖4-27所示,不再詳細分析。調整布局,運行一段時間之后的結果如圖4-28所示。圖4-27流程中增加濕度監(jiān)控圖4-28溫濕度監(jiān)測情況四、任務小結與練習任務小結任務2在Node-RED中設計流程,分別實現(xiàn)了Node-RED接收MQTT消息、Web頁面通過gauge展示溫度、Web頁面通過折線圖展示溫度和濕度等功能。任務2重點學習了節(jié)點對JSON格式消息的解析方法。將展示溫濕度流程中折線圖節(jié)點的橫軸改為20分鐘,觀察20分鐘的變化,將結果提交到課程學習平臺。實踐練習謝謝聆聽2相關知識34任務小結與練習1任務實施任務引入與目標在Node-RED中搭建Web服務器一、任務引入與目標任務目標任務3在Node-RED中搭建Web服務器,APP收到用戶反饋意見時,APP中創(chuàng)建的HTTP客戶端連接服務器;服務器對HTTP請求進行處理,完成郵件轉發(fā),并將響應發(fā)回;APP接收HTTP響應,處理其中的數(shù)據部分。實現(xiàn)效果:(1)手機點擊“反饋建議”按鈕后,調出對話框。(2)在對話框輸入內容后,以post方式向Node-RED中創(chuàng)建的HTTP服務端提交HTTP請求,網址為后臺url加上后綴APP_feedback。(3)Node-RED中創(chuàng)建的HTTP服務端收到請求后,發(fā)回響應內容“成功收到,感謝您的反饋與建議”,APP將接收的響應內容在屏幕上Toast出來。(4)后臺將收到的內容轉發(fā)至作者郵箱。任務引入如果用戶對APP有一些建議,那么該怎樣聯(lián)系作者呢?可以在Node-RED中創(chuàng)建Web服務器,當用戶有建議時,可以通過HTTP客戶端向Web服務器提交請求,由Node-RED處理。二、相關知識Node-RED中的郵箱控件Node-RED的輸出郵箱控件,把msg.payload作為郵件內容,把msg.topic作為郵件主題。消息接收者可以在節(jié)點中配置,如果它是空白的,那么應該使用msg.to來設置它。消息的屬性如果留下空白,也可以指定msg.cc(轉發(fā)的收件箱地址)屬性。注意,使用SMTP的SSL端口465。郵箱的IMAP和SMTP服務IMAP是一種電子郵件接收的協(xié)議,用于管理和檢索來自接收服務器的電子郵件消息。SMTP是一種電子郵件發(fā)送的協(xié)議,可以使用SMTP從郵件客戶端(如QQ郵箱)向接收電子郵件服務器發(fā)送、中繼或轉發(fā)郵件。SMTP中繼服務可以幫助用戶發(fā)送電子郵件,而不需要建立自己的SMTP服務器。二、相關知識以QQ郵箱為例,設置IMAP(接收)/SMTP(發(fā)送)服務。需要保證IMAP/SMTP服務這一項是開啟的,如圖4-29所示。如圖4-30所示,成功開啟后,會給一個授權碼,需要記住。如果忘記也沒關系,可以再次生成。上述配置的IMAP和SMTP中繼服務,會在Node-RED中的接收和發(fā)送郵件節(jié)點用到,用來實現(xiàn)接收郵件和發(fā)送郵件功能。圖4-29QQ郵箱的IMAP/SMTP服務圖4-30IMAP/SMTP服務的授權碼三、任務實施實施設備部署了AndroidStudio和Node-RED開發(fā)環(huán)境的計算機。實施過程1.APP設計APP設計里,需要用到OkHttp框架和對話框的知識。在ThirdActivity.java中,針對btn32進行設計。(1)對話框。已經添加viewBinding框架,需要在第三個頁面編寫btn32按鈕的事件監(jiān)聽方法。binding3.btn32.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){finalEditTextet=newEditText(ThirdActivity.this);et.setText("很好");AlertDialogalertDialog=newAlertDialog.Builder(ThirdActivity.this).setTitle("請?zhí)峤灰庖娊ㄗh").setView(et).setPositiveButton("確定",newDialogInterface.OnClickListener(){@OverridepublicvoidonClick(DialogInterfacedialogInterface,inti){textSuggest=et.getText().toString();Post_as();}}).setNegativeButton("取消",null).show();}})三、任務實施前面需要定義變量:privateStringtextSuggest;點擊“確定”按鈕后,調用Post_as()函數(shù),將文本框的內容textSuggest以post的方式、HTTP請求提交給后臺:11:1880/APP_feedback。(2)異步請求Post_as()函數(shù)。所謂異步請求,就是把請求加入enqueue(隊列)中,等待執(zhí)行。接下來,我們在異步請求函數(shù)Post_as()中使用POST方法,提交異步請求,代碼如下://異步請求函數(shù)privatevoidPost_as(){//創(chuàng)建表單FormBodyformBody=newFormBody.Builder().add("username",).add("feedback",textSuggest).build();//將表單數(shù)據放入request中,通過post方法提交Requestrequest=newRequest.Builder().url("11:1880/APP_feedback").post(formBody).build();//將客戶端加入隊列中,會自動在子線程中運行,返回有2種情況:失敗或者有響應okHttpClient.newCall(request).enqueue(newCallback(){@OverridepublicvoidonFailure(@NonNullCallcall,@NonNullIOExceptione){e.printStackTrace();}三、任務實施如果沒有收到response,那么不做處理;如果收到response,那么Toast出后臺響應的數(shù)據部分。@OverridepublicvoidonResponse(@NonNullCallcall,@NonNullResponseresponse)throwsIOException{//獲取響應的數(shù)據部分Stringresult=response.body().string();//在主線程中Toast出來runOnUiThread(newRunnable(){@Overridepublicvoidrun(){Toast.makeText(ThirdActivity.this,"后臺回復:"+result,Toast.LENGTH_SHORT).show();}});}});}三、任務實施其中,11為Node-RED所部署的電腦在局域網中的IP地址。如圖4-31所示,查看IP地址的方法:cmd命令行。輸入:ipconfig。至此,APP設計就完成了,結構如圖4-32所示。圖4-31查看IP地址圖4-32APP結構三、任務實施2.Node-RED流程設計(1)測試打印APP提交的表單信息。在cmd命令行,輸入:node-red。啟動Node-RED。注意不要關閉cmd。在NR中,添加一個httpin節(jié)點和一個debug節(jié)點,連接起來。httpin是一個提供Web服務的HTTP端點(HTTP服務器),供APP訪問。如圖4-33所示,配置httpin節(jié)點,請求方式為POST;URL的后綴為/APP_feedback,完整的URL為11:1880/APP_feedback。debug節(jié)點直接打印消息內容,即httpin節(jié)點(HTTP服務器)收到的消息內容。圖4-33編輯httpin節(jié)點三、任務實施部署流程2,運行APP。當APP提交反饋意見“很好!!!”時,Node-RED的debug打印內容如圖4-34所示。圖4-34表明:Node-RED成功收到APP的HTTP客戶端POST的數(shù)據,這正是APP代碼的2個表單項:圖4-34Node-RED接收到HTTP請求//創(chuàng)建表單FormBodyformBody=newFormBody.Builder().add("username",).add("feedback",textSuggest).build();三、任務實施(2)Web展示APP提交的表單信息。在Web頁面顯示APP提交的表單內容是較為容易的,回顧之前的JSON解析知識即可完成。設計dashboard,添加頁面(菜單)“實時反饋與建議”,如圖4-35所示,添加一個組“反饋與建議”,組里面添加2個“text”節(jié)點作為組件。2個text節(jié)點的配置如圖4-36所示。圖4-35流程中添加反饋與建議部分圖4-36編輯text節(jié)點三、任務實施查看Web頁面,如圖4-37所示。(3)Web服務器給APP發(fā)回response。如圖4-38所示,在流程中增加一個“change”節(jié)點和一個“httpresponse”節(jié)點。httpresponse節(jié)點將響應(response)送回提交請求(request)的HTTP客戶端。圖4-37查看Web頁面圖4-38流程中設定響應內容圖4-39編輯change節(jié)點change節(jié)點配置如圖4-39所示。三、任務實施httpresponse節(jié)點按默認設置即可,如圖4-40所示。結果如圖4-41所示:APP提交之后,會Toast從后臺response的內容。圖4-40編輯httpresponse節(jié)點圖4-41APP接收到response三、任務實施在流程中添加發(fā)送郵件節(jié)點,如圖4-42所示。如果沒有這個節(jié)點,那么需要安裝,如圖4-43所示。圖4-42添加發(fā)送郵件節(jié)點圖4-43安裝email節(jié)點三、任務實施發(fā)送郵件節(jié)點配置,包括收件箱地址、郵件服務器和端口號、發(fā)件箱地址和授權碼,如圖4-44所示。部署流程,查看收件箱是否收到郵件,結果如圖4-45所示。圖4-44編輯email節(jié)點圖4-45收件箱收到郵件當然我們還可以在郵件節(jié)點的前面加上函數(shù)節(jié)點,配置郵件轉發(fā)等功能,可自行查閱資料研究。我們還可以讓Node-RED接收郵件。四、任務小結與練習任務小結任務3在Node-RED中設計流程,并結合APP中POST方式的HTTP請求,實現(xiàn)了郵件轉發(fā)功能。修改HTTP請求時表單中的字段名及值,在自己的郵箱中接收用戶提交的反饋意見。實踐練習謝謝聆聽2相關知識34任務小結與練習1任務實施任務引入與目標部署MySQL數(shù)據庫服務器一、任務引入與目標任務引入APP中的很多功能都需要用到數(shù)據庫,比如用戶登錄和注冊。如果將用戶名和密碼存放在Android工程中,是很難實現(xiàn)注冊功能的。我們可以部署MySQL數(shù)據庫服務器,來完成需要數(shù)據存儲的功能。任務目標任務4將在計算機上部署MySQL數(shù)據庫服務器,并安裝可視化數(shù)據庫管理軟件,方便數(shù)據庫的操作。如果擁有一臺云服務器,那么將MySQL數(shù)據庫部署在上面,使用會更為方便。二、相關知識使用數(shù)據庫的優(yōu)勢數(shù)據庫是現(xiàn)代應用程序的重要組成部分,使用數(shù)據庫可以帶來以下幾個優(yōu)勢:(1)數(shù)據持久化。通過將數(shù)據存儲在數(shù)據庫中,可以確保數(shù)據即使在應用程序關閉或重啟之后也能夠保存下來,并且不會因為系統(tǒng)崩潰或斷電等問題而丟失。(2)數(shù)據共享。多個應用程序可以使用同一個數(shù)據庫,從而實現(xiàn)數(shù)據共享和協(xié)作,這樣可以提高團隊協(xié)作效率,避免重復開發(fā)。(3)數(shù)據安全性。通過使用數(shù)據庫管理系統(tǒng),可以對數(shù)據進行加密、備份和恢復等操作,從而保證數(shù)據的安全性和可靠性。(4)數(shù)據一致性。在數(shù)據庫中,可以通過事務控制機制來保證數(shù)據的一致性,防止數(shù)據沖突和錯誤。(5)高效查詢。數(shù)據庫具有快速查詢和檢索數(shù)據的能力,便于進行數(shù)據分析和處理,提高數(shù)據的處理效率和準確性??傊?使用數(shù)據庫不僅可以提高應用程序的可靠性、安全性和靈活性,還可以提高數(shù)據處理效率和數(shù)據質量,是現(xiàn)代應用程序的不可或缺的一部分。二、相關知識常用的數(shù)據庫在開發(fā)中,常用的數(shù)據庫有如下幾種:(1)SQLite是一個輕量級的嵌入式關系型數(shù)據庫管理系統(tǒng),適用于移動設備和嵌入式設備等資源受限環(huán)境。它支持大部分SQL語法,并具有高可靠性、低復雜度和易于集成的特點。(2)MySQL是一種流行的關系型數(shù)據庫管理系統(tǒng),適用于多用戶、高并發(fā)的應用場景。它具有高性能、高可靠性和可擴展性等優(yōu)點,同時支持多種操作系統(tǒng)和編程語言。(3)Oracle是一個企業(yè)級關系型數(shù)據庫管理系統(tǒng),適用于高要求的數(shù)據處理和管理場景。它具有高可靠性、安全性、靈活性和可擴展性等優(yōu)點,并支持多種操作系統(tǒng)和編程語言。(4)MongoDB是一個面向文檔的NoSQL數(shù)據庫管理系統(tǒng),適用于大規(guī)模數(shù)據存儲和處理場景。它具有高速度、高伸縮性和易于擴展等優(yōu)點,并支持多種操作系統(tǒng)和編程語言。(5)Redis是一個高速的內存鍵值存儲數(shù)據庫,適用于高速數(shù)據讀寫和查詢場景。它具有高速度、高吞吐量和低延遲等優(yōu)點,并支持多種數(shù)據結構和編程語言。這些數(shù)據庫各有優(yōu)劣,選擇哪種數(shù)據庫取決于具體應用場景和需求。例如,如果需要在移動設備上存儲和管理數(shù)據,則SQLite可能是更好的選擇;如果需要處理高并發(fā)的事務和請求,則MySQL或Oracle可能更適合;如果需要存儲大量文檔類型的數(shù)據,則MongoDB可能更合適;如果需要高速讀寫和查詢數(shù)據,則Redis可能更適合。三、任務實施實施設備安裝了Windows操作系統(tǒng)的計算機。實施過程1.下載MySQL安裝包在瀏覽器中輸入官網網址(/downloads/windows/installer/8.0.html),進入下載頁面,下載安裝包,如圖4-46所示。圖4-46下載MySQL安裝包三、任務實施2.安裝MySQL雙擊安裝,選擇安裝類型:僅服務器,如圖4-47所示。其他步驟按默認操作,直到顯示安裝完成,如圖4-48所示。圖4-47選擇安裝類型界面圖4-48MySQL安裝完成界面三、任務實施3.配置MySQL出現(xiàn)以下界面,默認選第一項,主要是端口號的設置,如圖4-49所示。密碼驗證方式有兩種:caching_sha2_password,mysql_native_password。建議選擇第二種,如圖4-50所示。圖4-49端口號設置界面圖4-50密碼驗證方式界面三、任務實施設置密碼,如圖4-51所示。系統(tǒng)服務名稱、啟動方式等按默認即可,如圖4-52所示。圖4-51設置密碼界面圖4-52系統(tǒng)服務界面三、任務實施如圖4-53所示,勾選Yes。配置完成,然后逐步執(zhí)行即可。4.測試MySQL如圖4-54所示,從開始菜單中打開剛剛安裝的mysql命令行客戶端,輸入密碼按回車鍵進入,然后輸入“showdatabases;”。圖4-54的命令行界面顯示了MySQL服務器中默認存在的數(shù)據庫,工作正常。圖4-53用戶權限界面圖4-54測試顯示數(shù)據庫名三、任務實施下載網址:/download.php,如圖4-55所示。下載后,雙擊安裝。安裝完成后,登錄界面如圖4-56所示。輸入正確的IP地址、用戶名、密碼、端口,即可登錄,如圖4-57所示。圖4-55下載HeidiSQL圖4-56HeidiSQL會話圖4-57進入MySQL四、任務小結與練習任務小結任務4在計算機上部署了MySQL數(shù)據庫服務器,并安裝了可視化數(shù)據庫管理軟件HeidiSQL。為MySQL增加一個普通用戶,然后通過HeidiSQL找到mysql數(shù)據庫里的user表,看看新增加的用戶是否存在。實踐練習謝謝聆聽2相關知識34任務小結與練習1任務實施任務引入與目標Node-RED對MySQL數(shù)據庫的增刪改查一、任務引入與目標任務引入數(shù)據庫最基本和常用的操作就是對數(shù)據表記錄的增刪改查。在Node-RED中該如何訪問MySQL中的數(shù)據庫,進而對數(shù)據表中的記錄進行增刪改查呢?任務目標任務5將在MySQL里創(chuàng)建數(shù)據庫和數(shù)據表,通過Node-RED訪問數(shù)據庫,實現(xiàn)對數(shù)據表記錄的增刪改查,其中的關鍵是SQL語句語法。二、相關知識增加一條記錄的SQL語句語法:INSERTINTOtable_name(column1,column2,column3,...)VALUES(value1,value2,value3,...);功能是:插入一條記錄到表table_name中,值是value1,value2,value3,...。對應字段為column1,column2,column3,...。刪除記錄的SQL語句語法:DELETEFROMtable_nameWHEREsome_column=some_value;功能是:當滿足條件some_column=some_value時,從表table_name中刪除某條記錄。二、相關知識修改記錄的SQL語句語法:UPDATEtable_nameSETcolumn1=value1,column2=value2,...WHEREsome_column=some_value;功能是:當滿足條件some_column=some_value時,修改table_name表中記錄column1字段的值為value1,column2字段的值為value2,以此類推。查詢表語法:SELECTcolumn1,column2FROMtable_name;功能是:查詢表中記錄的column1和column2列的值;可以使用WHERE語句來包含任何條件,可以使用LIMIT屬性來設定返回的記錄數(shù)。課堂討論SQL語句中的關鍵字區(qū)分大小寫嗎?三、任務實施實施設備部署了MySQL和Node-RED開發(fā)環(huán)境的計算機。實施過程1.新建數(shù)據庫和數(shù)據表新建數(shù)據庫和數(shù)據表在命令行和可視化管理軟件中均可完成。任務5以HeidiSQL為例講解。(1)創(chuàng)建數(shù)據庫node_red_test。創(chuàng)建新的數(shù)據庫node_red_test,如圖4-58所示。圖4-58創(chuàng)建數(shù)據庫三、任務實施(2)創(chuàng)建數(shù)據表student。如圖4-59所示,創(chuàng)建數(shù)據表,共四個字段:id、name、age、class。其中,id為自動增長。id設為主鍵,如圖4-60所示。圖4-59創(chuàng)建數(shù)據表圖4-60創(chuàng)建主鍵索引然后保存即可?,F(xiàn)在表中數(shù)據記錄顯示為0條記錄,如圖4-61所示。圖4-61student表的記錄三、任務實施2.配置Node-RED中的mysql節(jié)點啟動Node-RED。先在命令行輸入node-red,然后在瀏覽器輸入網址登錄::1880/。將mysql節(jié)點拖入流程中,如圖4-62所示,配置mysql節(jié)點。如圖4-63所示,如果信息正確,部署之后,就會發(fā)現(xiàn)數(shù)據庫node_red_test連接成功。圖4-62編輯mysql節(jié)點圖4-63成功連接到數(shù)據庫node_red_test三、任務實施3.通過mysql節(jié)點增加一條記錄如圖4-64所示,拖入一個inject節(jié)點和一個function節(jié)點,連接起來。其中,inject用于單次觸發(fā),function用于編寫數(shù)據庫操作的SQL語句。節(jié)點的配置如圖4-65所示。圖4-64增加一條記錄流程圖4-65編輯inject節(jié)點三、任務實施function節(jié)點實際上就是一個JavaScript代碼編輯器,在function節(jié)點的函數(shù)選項卡編輯msg的topic和payload,傳入下一節(jié)點(即node_red_test數(shù)據庫節(jié)點),如圖4-66所示。完整的SQL語句為:insertinto"student"("id","name","age","class")values(,"zhangsan",19,"IOT2101")。其中,id的值為空,因為id是自動增加的,可以不用賦值。完成后部署。點擊inject節(jié)點觸發(fā)一次,如圖4-67所示。圖4-66編輯function節(jié)點圖4-68數(shù)據表增加了一條記錄查看數(shù)據庫node_red_test中student表的數(shù)據,增加了一條記錄,如圖4-68所示。圖4-67觸發(fā)inject節(jié)點三、任務實施按同樣的方法,增加3個inject和3個function節(jié)點,在數(shù)據表中增加3條記錄,如圖4-69所示。圖4-69增加4條記錄的流程圖4-70數(shù)據表中的4條記錄重新部署,新增加的3個inject節(jié)點各觸發(fā)一次。結果如圖4-70所示。三、任務實施4.通過mysql節(jié)點修改記錄假設剛才輸入的lisi的年齡錯了,不是20歲而是21歲。修改記錄的流程如圖4-71所示。圖4-71修改記錄的流程圖4-72編輯function節(jié)點如圖4-72所示,用SQL語句編輯function節(jié)點,語句為:update"student"set"age"=21where"name"="lisi"。三、任務實施部署之后,單擊inject節(jié)點左側的方框觸發(fā),如圖4-73所示。圖4-73觸發(fā)inject節(jié)點圖4-74修改數(shù)據表中的記錄結果如圖4-74所示,可見,lisi的age被修改成了21歲。三、任務實施5.通過mysql節(jié)點查詢數(shù)據表(1)查詢操作。在查詢操作之前,把上面2個mysql節(jié)點設置為無效,以節(jié)省資源。節(jié)點無效的方法:打開節(jié)點,在左下角點擊即可在“有效”和“無效”之間切換。節(jié)點無效之后,則變成半透明的。下面編輯流程,共4個節(jié)點,如圖4-75所示。如圖4-76所示編輯function節(jié)點,傳往下一個節(jié)點的消息為SQL語句:select*from"student"where"name"="lisi"。圖4-75查詢數(shù)據表的流程圖4-76編輯function節(jié)點三、任務實施部署之后,觸發(fā)。打印結果如圖4-77所示。因為只查詢到一條記錄,所以返回的列表(數(shù)組)中只有一個元素。這個唯一的索引為0的元素是JsonObject(JSON對象)格式的,由4個成員構成。所以可能有人會問:“如何取出其班級值呢?”有了數(shù)組和JSON對象的知識,我們很容易可以寫出:msg.payload[0].class。可以在debug節(jié)點前增加一個function節(jié)點或change節(jié)點,獲取數(shù)據庫查詢的返回內容并提取之后,在debug打印出來。(2)change節(jié)點解析。增加change節(jié)點,如圖4-78所示。圖4-77打印查詢結果圖4-78增加change節(jié)點三、任務實施change節(jié)點配置如圖4-79所示。部署并觸發(fā),觀察結果,如圖4-80所示。圖4-79編輯change節(jié)點圖4-80打印解析結果三、任務實施(3)function節(jié)點解析。增加function節(jié)點,如圖4-81所示。function節(jié)點配置,如圖4-82所示。圖4-81增加function節(jié)點圖4-82編輯function節(jié)點三、任務實施部署并觸發(fā),觀察結果,如圖4-83所示。6.通過mysql節(jié)點刪除記錄刪除name為wangwu的記錄,流程如圖4-84所示。圖4-83打印解析結果圖4-84刪除記錄流程三、任務實施如圖4-85所示,配置function節(jié)點,SQL語句為:delete

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

"user"where"username"="admin"。mysql節(jié)點的配置如圖4-99所示。圖4-98編輯SQL語句節(jié)點圖4-99編輯mysql節(jié)點圖4-97編輯function節(jié)點三、任務實施部署流程3,手機運行APP,如圖4-100所示。點擊APP的注冊按鈕,在對話框中輸入用戶名和密碼,點擊確定。Node-RED打印調試信息,效果如圖4-101所示??梢?我們能夠成功根據提交的用戶名查詢數(shù)據庫,但數(shù)據庫返回結果為空。這是因為數(shù)據表user的數(shù)據就是空的。圖4-100APP提交用戶名和密碼圖4-101Node-RED打印調試信息三、任務實施如果前面查詢不到記錄,則可在數(shù)據庫中增加一條記錄(insert),即注冊功能。流程如圖4-102所示。在上個流程的基礎上,根據數(shù)據庫查詢結果判斷是否已存在用戶名:若已存在,則向APP的HTTP客戶端回復“UsernameExists”;若不存在,則編寫增加SQL語句,連接數(shù)據庫執(zhí)行insert操作,并向APP的HTTP客戶端回復“SuccessRegistration”。如圖4-103所示,在“獲取用戶名和密碼”函數(shù)節(jié)點,增加2個在flow內使用的全局變量,后邊的“insertuser”的節(jié)點要用到。圖4-102注冊用戶流程圖4-103編輯function節(jié)點三、任務實施switch節(jié)點判斷查詢結果里id字段的值是否為空,即數(shù)據表中是否有同名字段,如圖4-104所示。如圖4-105所示,在change節(jié)點編輯response內容,送給httpresponse節(jié)點(response內容將發(fā)還請求客戶端),告知用戶名已存在。圖4-104編輯switch節(jié)點圖4-105編輯change節(jié)點三、任務實施如圖4-106所示,“insertuser”函數(shù)節(jié)點會獲取全局變量“username”和“password”的值,用在SQL語句的編寫過程中。如圖4-107所示,告知APP的HTTP客戶端注冊成功。圖4-106編輯insertuser節(jié)點圖4-107編輯成功回復的change節(jié)點三、任務實施4.結果測試部署流程。根據APP提交的用戶名和數(shù)據表中存在的用戶名匹配情況,可能用戶注冊成功,也可能注冊失敗。(1)注冊成功的情況。如圖4-108所示,在APP的注冊按鈕調出的對話框中輸入用戶名和密碼,Toast“恭喜,注冊成功”。如果原來數(shù)據庫不存在,就會添加進去。圖4-108APP注冊成功三、任務實施如圖4-109所示,數(shù)據庫增加了一條記錄。(2)注冊失敗的情況。如果已存在同一個用戶名,則會提示注冊不成功,如圖4-110所示。圖4-110注冊失敗的情況圖4-109數(shù)據庫增加了一條記錄四、任務小結與練習任務小結任務6實現(xiàn)了APP中用戶注冊功能,包括APP、數(shù)據庫和Node-RED的設計。用戶能否注冊成功的關鍵是提交的用戶名和數(shù)據表中的用戶名是否匹配??梢宰匀舾蓚€用戶名,如果APP顯示注冊成功的話,在數(shù)據庫中查看數(shù)據表的記錄,結果提交到課程學習平臺。實踐練習謝謝聆聽2相關知識34任務小結與練習1任務實施任務引入與目標APP的用戶登錄功能一、任務引入與目標任務引入任務6實現(xiàn)了APP的用戶注冊功能,接下來是APP的用戶登錄功能。用戶能否注冊成功的關鍵是提交的用戶名和數(shù)據表中的用戶名是否匹配。那么用戶能否登錄成功的關鍵又是匹配什么呢?很顯然,既要用戶名匹配,也要密碼匹配,具體在Node-RED中通過流程實現(xiàn)判斷。任務目標任務7將實現(xiàn)以下目標:在APP中點擊btn11按鈕時,彈出自定義對話框;在對話框中輸入要登錄的用戶名和密碼,通過HTTP客戶端向Web服務器發(fā)送POST方式的請求;Web服務器接收到請求后,查詢用戶表中是否已存在用戶名以及密碼是否相符,并發(fā)回response;如果用戶名和密碼均匹配,則發(fā)回登錄成功的response;APP的HTTP客戶端收到HTTPresponse后,根據response的內容,決定是否跳轉到APP第二頁,或者Toast提示信息。二、相關知識Android工程中變量的作用域在Android工程中,變量的作用域是指變量在程序中可以被訪問的范圍。變量的作用域由它在代碼中聲明的位置和使用的修飾符等決定。以下是一些常見的變量作用域:(1)局部變量是在方法內部或代碼塊中定義的變量,只能在該方法或代碼塊中使用。局部變量可以根據需要進行初始化,包括基本數(shù)據類型和對象引用類型。(2)成員變量是在類中定義的變量,可以被類中的所有方法和代碼塊訪問。成員變量分為實例變量和靜態(tài)變量兩種類型。實例變量只有在創(chuàng)建類的實例后才能訪問,而靜態(tài)變量可以在類被加載時就被訪問。(3)參數(shù)變量是作為方法的參數(shù)傳遞進來的變量,可以在方法內部使用。參數(shù)變量的作用域與局部變量相同,只能在方法內部訪問。需要注意的是,變量的作用域和生命周期不同,變量作用域結束并不意味著它的生命周期也結束。例如,一個對象引用類型的變量,在方法結束后其作用域結束,但是其引用的對象可能仍然存在于內存中,直到垃圾回收器將其清除。二、相關知識Android中的Toast在Android開發(fā)中,Toast是一個簡單的提示框架,用于在屏幕上顯示短暫的消息。Toast可以用于提示用戶某個操作已成功完成、某個錯誤已發(fā)生或其他一些需要向用戶展示信息的場景。以下是使用Toast的一般步驟:調用靜態(tài)方法makeText()來創(chuàng)建Toast對象,并傳入Context、提示文本和Toast顯示時間等參數(shù);調用show()方法將Toast顯示在屏幕上;當Toast顯示時間結束后,Toast會自動消失。例如,下面的代碼演示了如何在Android應用程序中使用Toast://定義一個Context變量Contextcontext=getApplicationContext();//創(chuàng)建和顯示ToastCharSequencetext="HelloToast!";intduration=Toast.LENGTH_SHORT;Toasttoast=Toast.makeText(context,text,duration);toast.show();在這個例子中,我們首先獲取了一個ApplicationContext對象;然后創(chuàng)建了一個Toast對象,并設置Toast提示文本為“HelloToast!”,Toast顯示時間為SHORT(即2秒鐘);最后,調用show()方法,在屏幕上顯示Toast。三、任務實施實施設備部署了AndroidStudio、MySQL、Node-RED開發(fā)環(huán)境的計算機。實施過程1.APP設計(1)btn11按鈕的單擊事件監(jiān)聽。btn11按鈕在第一個頁面的布局如圖4-111所示。圖4-111btn11的布局三、任務實施在第一個頁面的活動文件MainActivity.java中編寫btn11按鈕的事件監(jiān)聽方法,如圖4-112所示。項目2的任務6實現(xiàn)過btn11的單擊功能,單擊btn11后APP直接跳轉到page2。本任務需要完善btn11的單擊功能,實現(xiàn)點擊btn11后訪問數(shù)據庫,用戶名和密碼驗證無誤后APP跳轉到page2。另外,登錄功能的很多代碼與注冊功能類似,可以拷貝后修改。圖4-112btn11按鈕的事件監(jiān)聽三、任務實施對話框代碼:程序的功能:點擊btn11后,會跳出2個輸入框和1個“確定”按鈕;取出輸入框的內容賦值給變量userNameLog和passWordLog;點擊“確定”按鈕后,將userNameLog和passWordLog作為參數(shù),以post的方式提交HTTP請求到Node-RED中的HTTP服務端。binding1.btn11.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){//容器layout:線性布局,包括2個輸入框LinearLayoutlayout=newLinearLayout(MainActivity.this);layout.setOrientation(LinearLayout.VERTICAL);finalEditTextet3=newEditText(MainActivity.this);et3.setText("用戶名:");layout.addView(et3);finalEditTextet4=newEditText(MainActivity.this);et4.setText("密碼:");layout.addView(et4);//對話框:由Title、2個輸入框、確定按鈕、取消按鈕組成AlertDialogalertDialog=newAlertDialog.Builder(MainActivity.this).setTitle("請輸入用戶名和密碼")//標題.setView(layout)//輸入框et3和et4.setPositiveButton("確定",newDialogInterface.OnClickListener

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論