版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第9章
登錄驗證
AndroidStudio項目開發(fā)實戰(zhàn)——從基礎(chǔ)入門到趣味開發(fā)(第2版)目錄工作任務(wù)概述01PART預(yù)備知識02PART熱身任務(wù)03PART工作任務(wù)04PART教學(xué)目標
掌握?Java線?程的常用方法。
掌握?Handler?的使用方?法。
了解?Android?網(wǎng)絡(luò)開發(fā)常用技?術(shù)。
掌握利用?HttpURLConnection?類進行?Android?網(wǎng)絡(luò)開發(fā)的方?法。
掌握使用?SharedPreferences?對象存儲數(shù)據(jù)的方?法。
掌握利用?Android?原生技術(shù)解析?JSON?的方?法。
掌握?ProgressDialog?的使用方?法。01工作任務(wù)概述5.1工作任務(wù)概述本章的工作任務(wù)是實現(xiàn)“薪火傳承”App登錄驗證功能,需要完成以下工作子任?務(wù)。(1)實現(xiàn)在“登錄”界面[見圖?9-1(a)]輸入用戶名及密碼,單擊登錄圖標后,將用戶名及用戶密碼上傳至服務(wù)器,服務(wù)器對用戶身份進行驗證,并將驗證結(jié)果返回客戶端的功?能。(2)將服務(wù)器返回的信息進行?JSON?解析,判斷用戶個人信息是否通過驗證,若通過驗證,則將用戶名保存至?SharedPreferences?中,關(guān)閉“登錄”界面,將“個人中心”的“待君登錄”修改為服務(wù)器返回的用戶名[見圖?9-1(b)],否則顯示內(nèi)容為“用戶名或密碼錯誤”的消息框。02預(yù)備知識9.2.1線程1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。1.與?Android?相關(guān)的線程簡?介一個?Android?應(yīng)用程序默認只有一個進程,但是一個進程可以有多個線程。其中,主線程也被稱為?UI?線程,即?UIThread,在?Android?應(yīng)用程序開始運行時就被創(chuàng)建,該線程主要負責控制?UI?界面的顯示、更新和組件交互。所有的?Android?應(yīng)用程序組件(包括?Activity、Service、BroadcastReceiver)都在應(yīng)用程序的主線程中運行。任何組件中的耗時操作都可能阻塞其他組件的運行,包括?Service?和可見的?Activity。主線程如果長時間無法響應(yīng),將出現(xiàn)?ANR(應(yīng)用程序無響應(yīng))錯誤,為了避免出現(xiàn)?ANR錯誤,耗時操作一般都在子線程中處?理。2.線程的常用方?法start():參數(shù)類型為?void,用于啟動一個線程,執(zhí)行方法后,系統(tǒng)會開啟一個新線程來執(zhí)行用戶編寫的任務(wù),并分配相應(yīng)的資?源。run():參數(shù)類型為?void,當通過?start()方法啟動了一個線程后,該線程獲得?CPU?執(zhí)行時間后會自動進入?run()方法。因此要重寫?thread()方法就必須重寫?run()方法,在?run()方法中定義要執(zhí)行的任?務(wù)。thread.sleep(longmillis):參數(shù)類型為?void,sleep()方法可以使線程睡眠,釋放?CPU?資源以執(zhí)行其他任務(wù)。但是?sleep()方法不會釋放?monitor,如果當前線程持有某個對象,即使該線程進入睡眠狀態(tài),其他線程依舊無法訪問該對象。因此使用?sleep()方法需要捕獲異?常。。9.2.1線程1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。interrupt():參數(shù)類型為?void,通過?interrupt()方法可以中斷處于阻塞狀態(tài)的線?程。isInterrupted():參數(shù)類型為?Boolean,用于判斷一個線程是否被中斷。interrupt()方法和?isInterrupted()方法結(jié)合使用可以中斷處于非阻塞狀態(tài)的線?程。3.創(chuàng)建線?程創(chuàng)建線程有兩種方法:一是使用?Thread?類,二是使用?Runnable?接口。在使用?Runnable?接口時需要建立一個?Thread?實例。無論是使用?Thread?類還是使用?Runnable?接口創(chuàng)建線程,都必須建立?Thread?類或其子類的實?例。方法一:使用?Thread?類重寫?run()方?法。。9.2.1線程1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。方法二:使用?Runnable?接口重寫?run()方?法。。9.2.2Handler1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。1.Handler?概述Android?應(yīng)用程序在啟動時,首先會開啟主線程(UI?線程),負責管理界面中的?UI?控件。如果某操作用時?5?秒還未完成,那么系統(tǒng)會發(fā)出錯誤提示。因此一般在處理一些比較耗時的操作(如聯(lián)網(wǎng)讀取數(shù)據(jù)、讀取較大的本地數(shù)據(jù)等)時,會將這些操作放在一個子線程中,但子線程不能修改?UI。Handler?則可以解決主線程與子線程通信的問題,Handler?運行在主線程(UI?線程)中,它與子線程可以通過?Message?對象來傳遞數(shù)據(jù),從而達到主線程與子線程通信的目?的。2.簡單的?Handler?的使用步?驟第一步:在主線程中創(chuàng)建一個?Handler?對象,并且重寫其?handleMessage()方?法。第二步:創(chuàng)建一個子線程,并在此線程中創(chuàng)建一個?Message?對象,設(shè)置其相應(yīng)的屬?性。第三步:使用第一步創(chuàng)建的?Handler?對象將第二步創(chuàng)建的?Message?對象發(fā)送到主線程的消息隊列?中。第四步:主線程中的?Looper?對象會不斷地監(jiān)聽消息隊列中的內(nèi)容,當監(jiān)聽到消息隊列中有新的內(nèi)容時,就會從消息隊列中獲取此消息,并將該消息交給發(fā)送這個消息的?Handler?對象的?handleMessage()方法進行處?理。9.2.2Handler1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。3.Handler?的常用方?法handleMessage():用于處理消息。通過重寫?handleMessage()方法,處理從其他地方發(fā)送過來的消?息。sendMessage(message):用于發(fā)送消?息。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。1.SharedPreferences?概述SharedPreferences?存儲方式是一種在?Android?中存儲輕量級數(shù)據(jù)的方式,主要用來存儲一些簡單的配置信息,內(nèi)部以?Map?方式進行存儲,因此需要使用鍵值對形式提交和保存數(shù)據(jù),保存的數(shù)據(jù)以?XML?格式存放在本地的/data/data/<packagename>/shares_prefs?文件夾中。SharedPreferences?有以下?3?個特?點。(1)使用簡單,便于存儲輕量級的數(shù)?據(jù)。(2)只支持?Java?基本數(shù)據(jù)類型,不支持自定義數(shù)據(jù)類?型。(3)屬于單例對象,在整個應(yīng)用內(nèi)共享數(shù)據(jù),無法在其他應(yīng)用內(nèi)共享數(shù)?據(jù)。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。2.使用?SharedPreferences?對象存儲數(shù)據(jù)的步驟(1)第一步:獲得?SharedPreferences?對象。因為SharedPreferences?對象必須使用上下文獲得,所以在使用?SharedPreferences?時,注意先要獲得上下文。獲得?SharedPreferences?對象的方法如?下。參數(shù)一:要保存的?XML?文件名,不同的文件名產(chǎn)生的對象不同,但同一文件名可以產(chǎn)生多個引用,從而可以保證數(shù)據(jù)共享。注意此處在指定參數(shù)一時,不用手動添加?.xml?后綴,而由系統(tǒng)自動添?加。參數(shù)二:創(chuàng)建模式,常用的有MODE_PRIVATE、MODE_WORLD_READABLE、MODE_WORLD_WRITEABLE、MODE_APPEND
4?種模式。第?1?種模式使?SharedPreferences?存儲的數(shù)據(jù)只能在本應(yīng)用內(nèi)獲得;第?2?種模式和第?3?種模式分別使其他應(yīng)用可以讀、寫本應(yīng)用?SharedPreferences?存儲的數(shù)據(jù),但可能帶來安全問題,從AndroidN(AndroidAPI24)開始,這兩種模式已經(jīng)被移除;9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。(2)第二步:獲得?editor?對象。使用第一步中獲得的?SharedPreferences?對象獲得?editor?對象,方法如?下。(3)第三步:對數(shù)據(jù)實現(xiàn)增、刪、查?、改。添加、修改數(shù)據(jù)的方法如下。若此方法操作的鍵值對中的?key?不存在,則實現(xiàn)添加數(shù)據(jù)的功能;否則實現(xiàn)修改數(shù)據(jù)的功能。putString()方法用于添加字符串類型的?value,若要添加其他類型的?value,則需要替換?String。例如,若要添加?float?類型的?value,則需要使用?putFloat(key,value)方?法。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。刪除數(shù)據(jù)的方法如下。刪除以參數(shù)部分?key?為鍵的鍵值?對。清空數(shù)據(jù)的方法如下。提交數(shù)據(jù)的方法如下。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。(4)第四步:查詢數(shù)?據(jù),方法如下Stringresult=sharedPreferences.getString(key1,key2);key1?是要查詢的鍵,當鍵存在時,返回對應(yīng)的值;當鍵不存在時,返回?key2?作為結(jié)?果。使用?SharedPreferences?對象存儲數(shù)據(jù)的示例代碼如?下。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。9.2.3
SharedPreferences1.
AndroidAndroid?是一個基于?Linux?并開放源代碼的操作系統(tǒng),它最初由?AndyRubin?開發(fā),主要應(yīng)用于手機中,2005?年?8?月被?Google?收購。2007?年?11
月,Google?與?84?家硬件制造商、軟件開發(fā)商及電信運營商組建開放手機聯(lián)盟,共同研發(fā)并改良?Android。之后?Google?以?Apache?開源許可證的授權(quán)方式,公布了?Android?的源代碼。第一部?Android?智能手機發(fā)布于?2008?年?10?月,隨后,Android?的應(yīng)用逐漸擴展到平板電腦及其他設(shè)備,如電視、數(shù)碼相機、游戲機等。2011
年,Android?在全球的市場份額首次超過?Symbian(塞班)系?統(tǒng)。9.2.4
ProgressDialog11.ProgressDialog?概述在程序的執(zhí)行過程中,有些操作可能需要較長時間,如某些資源的加載、文件的下載、大量數(shù)據(jù)的處理等,這時可以使用進度條告知用戶明確的操作結(jié)束時間,讓用戶能夠了解程序當前的進度及狀態(tài),利用?ProgressDialog(進度條對話框)可以實現(xiàn)上述目的。2.ProgressDialog?的常用方法ProgressDialog?的使用方法比較簡單,只需先將其顯示到前臺,再啟動一個后臺線程定時更改表示進度的數(shù)值即可。ProgressDialog?的常用方法及其作用如表?9-1?所?示。9.2.5
Android?網(wǎng)絡(luò)編程11.?HTTP?概述HTTP?是一個屬于應(yīng)用層的、面向?qū)ο蟮膮f(xié)議,適用于分布式超媒體信息系?統(tǒng)。HTTP?的主要特點如?下。
(1)簡捷快速:當客戶向服務(wù)器請求服務(wù)時,只需要傳送請求方法和路?徑。(2)常用的請求方法有?GET、HEAD、POST,這些方法規(guī)定了客戶端與服務(wù)器聯(lián)系的類型,方法不同,聯(lián)系的類型不?同。(3)HTTP?十分簡單,這使得?HTTP?服務(wù)器的程序規(guī)模小、通信速度?快。(4)靈活:HTTP?允許傳輸任意類型的數(shù)據(jù)對象。傳輸?shù)念愋陀?Content-Type?標?記。(5)無連接:無連接的含義是限制每次連接只能處理一個請?求。(6)服務(wù)器處理完客戶端的請求,并在收到客戶端的應(yīng)答后斷開連?接。(7)采用?HTTP?可以節(jié)省傳輸時?間。(8)無狀態(tài):HTTP?是無狀態(tài)協(xié)議,無狀態(tài)協(xié)議是指協(xié)議對于事務(wù)處理沒有記憶能力。這意味著若后續(xù)處理過程需要先前的信息,則必須重新傳送信息,這樣可能導(dǎo)致每次連接時傳送的數(shù)據(jù)量增大。如果在服務(wù)器不需要處理先前信息時,那么它的應(yīng)答速度就較?快。9.2.5
Android?網(wǎng)絡(luò)編程12.
Android?網(wǎng)絡(luò)編程簡介下面介紹常用的?Android?網(wǎng)絡(luò)開發(fā)技?術(shù)。(1)HttpClient。原來AndroidSDK?中包含?HttpClient,但?6.0?版本的?Android?則直接刪除了?HttpClient?類庫,如果仍想使用該類庫,那么可以通過以下方法實?現(xiàn)。如果使用的是?Eclipse,那么在?libs?中加入?org.apache.http.legacy.jar?包即可,該?jar?包位于?sdk/platforms/android-23/optional?目錄中(需要下載?6.0?版本的?Android?的?SDK)。如果使用的是?AndroidStudio,那么在相應(yīng)的項目的?build.gradle?文件中添加以下代碼即可。9.2.5
Android?網(wǎng)絡(luò)編程1(2)HttpURLConnection。對于?2.2?及之前版本的?Android,HttpURLConnection?存在一些?bug,在此階段使用?HttpClient?是較好的選擇。而對于?2.3?及之后版本的?Android,HttpURLConnection?則是最佳的選擇,其?API?簡單,體積較小,因而非常適用于?Android?項目。另外,HttpURLConnection?的壓縮和緩存機制可以有效減少網(wǎng)絡(luò)訪問的流量,在提升速度和省電方面也非常有優(yōu)?勢。(3)Volley。在?2013?年?GoogleI/O?大會上推出了一個新的網(wǎng)絡(luò)通信框架,即?Volley。Volley?既可以訪問網(wǎng)絡(luò)并取得數(shù)據(jù),也可以加載圖片,并且其在性能方面也非常有優(yōu)勢。Volley?非常適用于進行數(shù)據(jù)量不大但通信頻繁的網(wǎng)絡(luò)操作,而對于大數(shù)據(jù)量的網(wǎng)絡(luò)操作,如下載文件等,Volley?的表現(xiàn)則非常糟?糕。(4)OkHttp。OkHttp?是目前應(yīng)用較多的網(wǎng)絡(luò)框架,它解決了很多網(wǎng)絡(luò)問題,可以從很多常見的連接問題中自動恢復(fù)。如果服務(wù)器配置了多個?IP?地址,當?shù)谝粋€?IP?地址連接失敗時,OkHttp?會自動嘗試連接下一個?IP?地址。此外,OkHttp?還解決了代理服務(wù)器問題和?SSL?握手失敗問?題。9.2.5
Android?網(wǎng)絡(luò)編程13.
HttpURLConnection無論是開發(fā)人員自己封裝的網(wǎng)絡(luò)請求類還是第三方開發(fā)的網(wǎng)絡(luò)請求框架,都離不開?HttpURLConnection
類庫。JDK
的
包提供了HttpURLConnection類,用于訪問
HTTP
的基本功能。HttpURLConnection?是?Java?的標準類,繼承自?URLConnection,可用于向指定網(wǎng)站發(fā)送?GET?請求和?POST?請求,它在?URLConnection?的基礎(chǔ)上提供了以下便捷的方?法。intgetResponseCode():獲取服務(wù)器的響應(yīng)代?碼。StringgetResponseMessage():獲取服務(wù)器的響應(yīng)消?息。StringgetResponseMethod():獲取發(fā)送請求的方?法。voidsetRequestMethod(Stringmethod):設(shè)置發(fā)送請求的方?法。HttpURLConnection?的使用步驟如?下。第一步:創(chuàng)建一個?URL?對?象。URLurl=newURL();第二步:利用?HttpURLConnection?對象從網(wǎng)絡(luò)中獲取網(wǎng)頁數(shù)?據(jù)。HttpURLConnectionconn=(HttpURLConnection)url.openConnection();9.2.5
Android?網(wǎng)絡(luò)編程1第三步:設(shè)置連接超?時。conn.setConnectTimeout(6*1000);//單位為毫秒第四步:對響應(yīng)信息進行判?斷。1. if(conn.getResponseCode()!=200)//從Internet獲取網(wǎng)頁,發(fā)送請求,將網(wǎng)頁以流的形式返回2. thrownewRuntimeException("請求url失敗");第五步:處理輸入/輸出?流。1. InputStreamis=conn.getInputStream();//獲取輸入流2. Stringresult=readData(is,"GBK");//利用自定義方法readData()讀取輸入流中的數(shù)據(jù)3. conn.disconnect();//關(guān)閉數(shù)據(jù)連接9.2.5
Android?網(wǎng)絡(luò)編程1示例代碼如下。9.2.5
Android?網(wǎng)絡(luò)編程19.2.5
Android?網(wǎng)絡(luò)編程19.2.5
Android?網(wǎng)絡(luò)編程19.2.5
Android?網(wǎng)絡(luò)編程19.2.6用?Android?原生技術(shù)解析?JSON11.JSON?概述JSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式。因為解析?XML?比較復(fù)雜,而且需要編寫大段代碼,所以客戶端和服務(wù)器的數(shù)據(jù)交換往往通過?JSON?進行。尤其對于?Web?開發(fā)來說,JSON?數(shù)據(jù)格式在客戶端可以直接通過?JavaScript?進行解?析。JSON?有兩種數(shù)據(jù)結(jié)構(gòu)。一種是以鍵值對(key:value)形式存在的無序?JSONObject?對象,JSONObject?對象以“{”開始,以“}”結(jié)束。鍵和值之間用“:”分隔,鍵值對之間用“,”分隔。例如,{"name":"xiaoluo"}就是一個最簡單的?JSONObject?對象,對于這種數(shù)據(jù)格式,key?必須是?String?類型,而?value?可以是?String、Number、Object、Array?等數(shù)據(jù)類型。另一種數(shù)據(jù)格式?JSONArray是有序的?value?的集合,它的形式為數(shù)組。數(shù)組以“[”開始,以“]”結(jié)束,值之間使用“,”分隔。例如:9.2.6用?Android?原生技術(shù)解析?JSON12.Android?的?JSON?解析部分主要用到的兩個類(1)JSONObject:可以將其看作?JSON?對象,它是系統(tǒng)中?JSON?定義的基本單元,包含一系列
key:value
鍵值對。在?JSONObject?對象中封裝了?getXXX()等一系列方法,用于根據(jù)?JSON?對象中的?key?獲取對應(yīng)的?value?值。JSONObject?類的?value?類型有?Boolean、JSONArray、Number、String?及默認值?JSONObject.NULLobject。(2)JSONArray:代表一組有序的數(shù)值。將?JSONArray?轉(zhuǎn)換為?String?輸出(toString)的形式是用方括號包裹,數(shù)值間以“,”分隔(如[value1,value2,value3])。JSONArray?封裝的?get()方法可以通過?index?索引返回指定的數(shù)值,put()方法用來添加或替換數(shù)值。JSONArray?類的?value?類型有?Boolean、JSONArray、JSONObject、Number、String?及默認值?JSONObject.NULLobject。9.2.6用?Android?原生技術(shù)解析?JSON13.?用?Android?原生技術(shù)解析?JSON?例如,有一個?student?字段,其中包含了該?student?的一些基本屬性,具體代碼如?下。9.2.6用?Android?原生技術(shù)解析?JSON1在代碼中,若被“{}”包含,則為?JSONObject?對象;若被“[]”包含,則為?JSONArray?對象。由此可以判斷出上面這段代碼的解析為?JSONObject?對象,其內(nèi)部包含了一個?student?字段,該字段的值也是一個?JSONObject?對?象。上面這段代碼的輸出結(jié)果為?rose。03熱身任務(wù)我的進度條對話框子任務(wù)19.3.1我的進度條對話框11.任務(wù)說明“我的進度條對話框”效果如圖?9-2?所示。單擊圖?9-2(a)中的“圓形進度條”按鈕,彈出如圖?9-2(b)所示的圓形進度條對話框。單擊圖?9-2(a)中的“長形進度條”按鈕,彈出如圖?9-2(c)所示的長形進度條對話框。9.3.1我的進度條對話框12.操作步驟(1)創(chuàng)建一個?Android?項?目。(2)打開?activity_main.xml?文件,編寫代碼完成布局效果,具體代碼如?下。9.3.1我的進度條對話框19.3.1我的進度條對話框1(3)打開?java?文件夾中的?MainActivity.java?文件,修改代碼以實現(xiàn)相關(guān)功能,具體代碼如?下。9.3.1我的進度條對話框19.3.1我的進度條對話框19.3.1我的進度條對話框1我激動,我數(shù)數(shù)子任務(wù)29.3.2我激動,我數(shù)數(shù)11.任務(wù)說明本任務(wù)在實現(xiàn)如圖?9-3?所示的“我激動,我數(shù)數(shù)”效果的同時完成以下兩項功?能。功能一:單擊“開始數(shù)數(shù)”按鈕,計數(shù)文本標簽從?0?開始,以每秒累加?1?的方式顯示總數(shù)。功能二:單擊“停止數(shù)數(shù)”按鈕,停止計數(shù)功?能。9.3.2我激動,我數(shù)數(shù)12.操作步驟(1)創(chuàng)建一個?Android?項?目。(2)將圖片復(fù)制到項目的?drawable?文件?夾中。(3)在布局文件中添加相應(yīng)組件,實現(xiàn)相應(yīng)的布局效果。布局文件代碼如?下。9.3.2我激動,我數(shù)數(shù)19.3.2我激動,我數(shù)數(shù)1(4)打開?MainActivity.java?文件,添加代碼,實現(xiàn)相應(yīng)功能,具體代碼及其功能說明如?下。9.3.2我激動,我數(shù)數(shù)19.3.2我激動,我數(shù)數(shù)19.3.2我激動,我數(shù)數(shù)1第?11~20?行代碼創(chuàng)建了一個?Handler,用于實現(xiàn)主線程與子線程的通?信。第?24~30?行代碼創(chuàng)建了一個?init()方法,用于初始化組件。需要注意的是,第?28?行及第?29?行代碼是另一種添加監(jiān)聽器的方法,這種方法多應(yīng)用于對多個組件添加同一個監(jiān)聽器,其使用要求是在類定義時通過?implements?添加監(jiān)聽接口,如第?1?行代碼所示,同時要實現(xiàn)監(jiān)聽接口所要求的方法,如第?31~42?行代碼所示。第?43~56?行代碼定義一個內(nèi)部類?MyThread?繼承?Thread?類,并重寫?run()方法實現(xiàn)每隔?1s?向?Handler?發(fā)送一次內(nèi)容為1的信?息的功能。9.3.2我激動,我數(shù)數(shù)小貼士
當使用了?sleep()方法、同步鎖的?wait()方法、socket?的?receiver()方法、accept()方法等方法時,會使線程處于阻塞狀態(tài)。當調(diào)用線程的?interrupt()方法時,系統(tǒng)會拋出一個?InterruptedException?異常,代碼通過捕獲異常和?break?語句跳出循環(huán)狀態(tài),使線程正常結(jié)束。若要正常結(jié)束?run()方法,則要先捕獲?InterruptedException?異常,再通過?break?語句來跳出循?環(huán)。中國名人榜子任務(wù)29.3.3中國名人榜11.
任務(wù)說明“中國名人榜”效果如圖?9-4?所示。當單擊圖?9-4(a)中的“中國名人榜”按鈕后,可從自建服務(wù)器中的?celebrity?接口請求數(shù)據(jù),若請求成功,則服務(wù)器返回數(shù)據(jù)的?JSON?字符串(見圖?9-5),接著通過?Android?原生技術(shù)解析出請求的?JSON?數(shù)據(jù)并顯示到界面中,如圖?9-4(b)所示。9.3.3中國名人榜12.操作步驟(1)運行本書素材中服務(wù)器程序?book_web_server?文件夾中的?myserver?應(yīng)用程序(見圖?9-6),啟動本機服務(wù)器,服務(wù)器成功啟動的界面如圖?9-7?所?示。9.3.3中國名人榜1(2)創(chuàng)建一個?Android?項?目。(3)打開?activity_main.xml?文件,編寫代碼并完成布局效果,具體代碼如?右圖所示。9.3.3中國名人榜1(4)在項目的res/layout?文件夾中添加?list_item.xml?文件,用于規(guī)范每個選項元素的界面布局。list_item.xml?文件代碼如右圖所示。9.3.3中國名人榜1(5)打開?java?文件夾中的?MainActivity.java?文件,修改代碼以實現(xiàn)相關(guān)功能,具體代碼如?下。9.3.3中國名人榜19.3.3中國名人榜19.3.3中國名人榜19.3.3中國名人榜19.3.3中國名人榜19.3.3中國名人榜19.3.3中國名人榜1第?45?行代碼中的?URL?地址是本機的?Web?服務(wù)接口,在一般的?Web?程序開發(fā)中,我們通常使用?localhost?或者
來訪問本機的?Web?服務(wù),但在?Android?模擬器中訪問本機服務(wù)時,一般會將?localhost?或者
換成
。本書開啟的服務(wù)器程序的端口號是?5000,如圖?9-7?所示,因此代碼中端口號為?5000。celebrity?是服務(wù)器程序接口?名。
9.3.3中國名人榜1第?88~132?行代碼主要用于?JSON?字符串數(shù)據(jù)的解析,在進行解析時一定要清晰解析對象的結(jié)構(gòu)。本案例對象可分解為如圖?9-8?所示的形式。9.3.3中國名人榜1(6)打開項目的?manifests?文件夾中的?AndroidManifest.xml?文件,在圖?9-9?序號1標識位置添加代碼<uses-permissionandroid:name="android.permission.INTERNET"/>,開啟?App?的?HTTP?網(wǎng)絡(luò)訪問權(quán)限,Google?為了用戶數(shù)據(jù)的安全性,強制要求高版本的?Android應(yīng)用必須使用HTTPS請求,而?HTTP?請求將失效,由于本書使用?HTTP?請求,因此需要在此文件中配置屬性?android:usesCleartextTraffic="true"(見圖9-9序號2)。9.3.3中國名人榜小貼士
由于?Android?中的網(wǎng)絡(luò)操作也是一種耗時操作,因此在處理網(wǎng)絡(luò)操作時,需要先開啟一個新的網(wǎng)絡(luò)線程,然后利用?Handler?來實現(xiàn)主線程及網(wǎng)絡(luò)線程之間的通?信。04工作任務(wù)實現(xiàn)登錄驗證子任務(wù)19.4實現(xiàn)登錄驗證11.知識點
?Handler?通信機?制。
利用?HttpURLConnection?進行?HTTP?網(wǎng)絡(luò)通?信的方法。
利用?Android?原生技術(shù)解析?JSON?對?象的方法。
添加ProgressDialog?的方法。2.工作任務(wù)實現(xiàn)“薪火傳承”App的登錄驗證功能,主要驗證流程為:用戶在“登錄”界面(見圖9-10)的用戶名輸入框和密碼輸入框中輸入數(shù)據(jù),并點擊登入圖標后,系統(tǒng)通過自建服務(wù)器?login?接口程序?qū)⒂脩裘懊艽a上傳至自建服務(wù)器,并對用戶身份進行驗證(正確的用戶名是?moon,密碼
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年國際傳統(tǒng)醫(yī)藥國際城市漁業(yè)航空合同
- 2026年廢疫病疫情波污染易發(fā)區(qū)保護保險合同中
- 2025年普陀區(qū)第二人民醫(yī)院招聘財務(wù)收費崗位合同制員工1名備考題庫及參考答案詳解一套
- 2025年廣州越秀區(qū)文聯(lián)招聘合同制輔助人員備考題庫及一套參考答案詳解
- 嘉善縣招聘協(xié)管員面試題及答案
- 勞保協(xié)管員面試題及答案解析(2025版)
- 2025國家公務(wù)員國家稅務(wù)總局富順縣稅務(wù)局面試試題及答案
- 2025年東光輔警招聘真題及答案
- 定西市隴西縣招聘城鎮(zhèn)公益性崗位工作人員考試真題2024
- 2025 九年級語文下冊戲劇人物性格特點分析課件
- 2026年安全員之A證考試題庫500道附完整答案(奪冠)
- 水里撈東西協(xié)議書
- 轉(zhuǎn)讓荒山山林協(xié)議書
- 銷售人員心理素質(zhì)培訓(xùn)大綱
- 財務(wù)顧問服務(wù)協(xié)議合同
- 國家開放大學(xué)《社會工作概論#》補修課形考答案
- 2025四川省國家工作人員學(xué)法用法考試復(fù)習(xí)重點試題(含答案)
- 2025山西大地環(huán)境投資控股有限公司招聘116人考試筆試參考題庫及答案解析
- 2025國家統(tǒng)計局齊齊哈爾調(diào)查隊招聘公益性崗位5人考試筆試參考題庫及答案解析
- 前列腺術(shù)后尿控功能康復(fù)策略
- 2025年浙江紅船干部學(xué)院、中共嘉興市委黨校公開選聘事業(yè)人員2人考試參考題庫附答案解析
評論
0/150
提交評論