Android應(yīng)用開(kāi)發(fā)案例教程課件_第1頁(yè)
Android應(yīng)用開(kāi)發(fā)案例教程課件_第2頁(yè)
Android應(yīng)用開(kāi)發(fā)案例教程課件_第3頁(yè)
Android應(yīng)用開(kāi)發(fā)案例教程課件_第4頁(yè)
Android應(yīng)用開(kāi)發(fā)案例教程課件_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

張霞深圳職業(yè)技術(shù)學(xué)院Android應(yīng)用開(kāi)發(fā)案例教程(AndroidStudio第二版)

0103020405AndroidUI設(shè)計(jì)圖像和動(dòng)畫(huà)數(shù)據(jù)存儲(chǔ)廣播Broadcast與服務(wù)Service媒體播放與錄制Activity與多個(gè)用戶(hù)界面07網(wǎng)絡(luò)編程技術(shù)書(shū)目錄06第7章

網(wǎng)絡(luò)編程技術(shù)Android應(yīng)用開(kāi)發(fā)案例教程(AndroidStudio第二版)7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計(jì)7.2基于HTTP的網(wǎng)絡(luò)程序設(shè)計(jì)7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)章目錄7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計(jì)Andiroid系統(tǒng)內(nèi)置瀏覽器WebKit是一個(gè)開(kāi)源的瀏覽器引擎,具有非常好的網(wǎng)頁(yè)解析機(jī)制。該開(kāi)源引擎由Java層和WebKit模塊兩個(gè)部分組成,Java層負(fù)責(zé)通信,WebKit模塊負(fù)責(zé)網(wǎng)頁(yè)的解析。7.1.1WebKit庫(kù)7.1.2Web視圖對(duì)象WebView類(lèi)WebView可以直接使用html文件(網(wǎng)絡(luò)或本地)作為布局。WebView能顯示和渲染W(wǎng)eb頁(yè)面。WebView可以和JavaScript交互。WebView是WebKit模塊的視圖類(lèi)。具有一般View的屬性和設(shè)置外,還可以對(duì)url請(qǐng)求、頁(yè)面加載、渲染、頁(yè)面交互進(jìn)行處理。1327.1.2Web視圖對(duì)象WebView類(lèi)在布局文件中聲明WebView。在Activity中實(shí)例化WebView。調(diào)用WebView的loadUrl()方法。用WebView響應(yīng)超鏈接,設(shè)置WebView視圖。通過(guò)WebView單擊鏈接進(jìn)行深度訪(fǎng)問(wèn)后,為了使WebView支持回退功能,可以重寫(xiě)Activity的onKeyDown()方法。在androidManifest.xml中添加權(quán)限:

<uses-permissionandroid:name="android.permission.INTERNET"/>WebView類(lèi)的調(diào)用步驟:7.1.2Web視圖對(duì)象WebView類(lèi)【例7-1】應(yīng)用WebView對(duì)象瀏覽網(wǎng)頁(yè)。用WebView顯示網(wǎng)頁(yè)7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計(jì)7.2基于HTTP的網(wǎng)絡(luò)程序設(shè)計(jì)7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)章目錄7.2基于HTTP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)-÷×+HTTP是一種請(qǐng)求/響應(yīng)式的協(xié)議,當(dāng)客戶(hù)端在與服務(wù)器端建立連接后,向服務(wù)器端發(fā)送的請(qǐng)求,稱(chēng)作HTTP請(qǐng)求。服務(wù)器端接收到請(qǐng)求后會(huì)做出響應(yīng),稱(chēng)為HTTP響應(yīng)。通過(guò)HttpURLConnection類(lèi)實(shí)現(xiàn)基于URL的請(qǐng)求及響應(yīng)功能。下面討論應(yīng)用HttpURLConnection訪(fǎng)問(wèn)Web服務(wù)器。312HttpURLConnection是抽象類(lèi),需通過(guò)URL的openConection()方法創(chuàng)建具體的連接對(duì)象。設(shè)置請(qǐng)求屬性,如連接超時(shí)時(shí)間、讀取超時(shí)時(shí)間等。HttpURLConnection通過(guò)Socket連接網(wǎng)絡(luò)。方法getOutputStream()

和getInputStream()

都會(huì)隱式地調(diào)用connect()方法,建立到遠(yuǎn)程資源的實(shí)際連接,這會(huì)與服務(wù)器建立Socket連接。7.2基于HTTP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)HttpURLConnection

類(lèi)的使用步驟如下:4遠(yuǎn)程資源連接后,訪(fǎng)問(wèn)遠(yuǎn)程對(duì)象的頭信息和內(nèi)容。HttpURLConnection是一種多用途、輕量級(jí)的HTTP客戶(hù)端,大多數(shù)的應(yīng)用程序可以使用它來(lái)進(jìn)行HTTP操作。7.2基于HTTP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)Android2.3以后版本增加了StrictMode類(lèi),對(duì)網(wǎng)絡(luò)的訪(fǎng)問(wèn)方式進(jìn)行了一定的改變。在磁盤(pán)訪(fǎng)問(wèn)或者網(wǎng)絡(luò)訪(fǎng)問(wèn)中,StrictMode用于捕獲與主進(jìn)程間交互產(chǎn)生的問(wèn)題。將磁盤(pán)訪(fǎng)問(wèn)和網(wǎng)絡(luò)訪(fǎng)問(wèn)從主線(xiàn)程中剝離,可以使訪(fǎng)問(wèn)更加流暢,提升用戶(hù)體驗(yàn)。一個(gè)進(jìn)程由一個(gè)或多個(gè)線(xiàn)程組成,線(xiàn)程是一個(gè)進(jìn)程中代碼的不同執(zhí)行路線(xiàn)。進(jìn)程之間相互獨(dú)立,但同一進(jìn)程下的各個(gè)線(xiàn)程之間共享程序的內(nèi)存空間及一些進(jìn)程級(jí)的資源。使用StrictMode將磁盤(pán)訪(fǎng)問(wèn)和網(wǎng)絡(luò)訪(fǎng)問(wèn)從主線(xiàn)程中剝離(1)線(xiàn)程管理策略StrictMode.setThreadPolicy(newStrictMode.ThreadPolicy.Builder() //構(gòu)造strictMode線(xiàn)程對(duì)象

.detectDiskReads() //當(dāng)發(fā)生磁盤(pán)讀操作時(shí)輸出

.detectDiskWrites() //當(dāng)發(fā)生磁盤(pán)寫(xiě)操作時(shí)輸出

.detectNetwork()//訪(fǎng)問(wèn)網(wǎng)絡(luò)時(shí)輸出,包括磁盤(pán)讀寫(xiě)和網(wǎng)絡(luò)I/O.penaltyLog() //以日志方式輸出

.build());(2)虛擬機(jī)管理策略StrictMode.setVmPolicy( newStrictMode.VmPolicy.Builder()

//構(gòu)造strictModeVW虛擬機(jī)對(duì)象

.detectLeakedSqlLiteObjects() //探測(cè)SQLite數(shù)據(jù)庫(kù)操作

.detectLeakedClosableObjects() //探測(cè)關(guān)閉操作

.penaltyLog().penaltyDeath().build());用一個(gè)案例來(lái)說(shuō)明HttpURLConnection類(lèi)和StrictMode類(lèi)使用?!纠?-2】從Web服務(wù)器讀取圖像文件。7.2基于HTTP協(xié)議的網(wǎng)絡(luò)程序設(shè)計(jì)布局的控件、屬性和效果從Web服務(wù)器讀取圖像文件的運(yùn)行效果Handler類(lèi)Android系統(tǒng)不允許在主線(xiàn)程中執(zhí)行耗時(shí)操作,耗時(shí)操作可以交給子線(xiàn)程去完成。需要一種機(jī)制在主線(xiàn)程和子線(xiàn)程之間進(jìn)行通信,這就是handler異步回調(diào)機(jī)制。handler歸屬于主線(xiàn)程,在主線(xiàn)程中聲明和實(shí)例化handler對(duì)象。Handler類(lèi)的作用

:

傳遞消息Message能讓子線(xiàn)程通知主線(xiàn)程更新UI避免內(nèi)存泄露classHHandlerextendsHandler

{

publicvoidhandleMessage(Messagemsg){

super.handleMessage(msg);

txt2.setText("(2)下載圖像成功!");

img.setImageBitmap((Bitmap)msg.obj);

}

}7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計(jì)7.2基于HTTP的網(wǎng)絡(luò)程序設(shè)計(jì)7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)章目錄Android在2013年推出新的網(wǎng)絡(luò)通信框架Volley,意在簡(jiǎn)化HTTP通信操作。Volley在性能方面進(jìn)行了大幅度調(diào)整,它的設(shè)計(jì)目標(biāo)是數(shù)據(jù)量不大,但通信頻繁的網(wǎng)絡(luò)操作。Volley的擴(kuò)展性強(qiáng),大多是基于接口的設(shè)計(jì),可配置性強(qiáng)。Volley可方便地獲取遠(yuǎn)程服務(wù)器的圖片、字符串、Json對(duì)象和Json數(shù)組等。Volley包的下載與安裝(不是必須):7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器從Android官網(wǎng)下載JAR文件:volley.jar。打開(kāi)項(xiàng)目的App文件夾,復(fù)制volley.jar并粘貼到libs文件夾。使用鼠標(biāo)右鍵單擊新粘貼的volley.jar項(xiàng),在彈出的菜單中選擇AddAsLibrary命令,完成jar包的安裝。7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器使用Volley有兩個(gè)途徑,一是安裝壓縮包,另一個(gè)是在build.gradle(app)添加一行代碼:implementation'com.android.volley:volley:1.2.1'7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器Volley在工作時(shí),首先由主線(xiàn)程(應(yīng)用程序)發(fā)起一條HTTP請(qǐng)求,將請(qǐng)求添加到緩存隊(duì)列中,然后,通過(guò)緩存調(diào)度線(xiàn)程,從緩存隊(duì)列中取出一個(gè)請(qǐng)求,解析并做出響應(yīng),最后將解析后的響應(yīng)發(fā)送給主線(xiàn)程。Volley的工作原理使用Volley框架需要?jiǎng)?chuàng)建2個(gè)重要對(duì)象:Request:請(qǐng)求對(duì)象RequestQueue:請(qǐng)求隊(duì)列7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器Volley的使用步驟:創(chuàng)建RequestQueue對(duì)象??捎脕?lái)管理多個(gè)并發(fā)異步的URL請(qǐng)求。創(chuàng)建Request對(duì)象。如果服務(wù)器成功響應(yīng),該如何處理傳回的數(shù)據(jù),如果服務(wù)器響應(yīng)失敗,該如何處理。將Request對(duì)象添加到RequestQueue中,開(kāi)啟排隊(duì)模式。

創(chuàng)建Request對(duì)象StringRequeststringRequest=newStringRequest(

//第1個(gè)參數(shù),目標(biāo)服務(wù)器的URL地址

url,

//第2個(gè)參數(shù),服務(wù)器響應(yīng)成功的回調(diào)

newResponse.Listener<String>(){@OverridepublicvoidonResponse(Stringresponse){

//成功的處理

}},//第3個(gè)參數(shù),服務(wù)器響應(yīng)失敗的回調(diào)

newResponse.ErrorListener(){@OverridepublicvoidonErrorResponse(VolleyErrorerror){

//失敗的處理

}});創(chuàng)建StringRequest對(duì)象,需要三個(gè)參數(shù):第1個(gè)參數(shù)是目標(biāo)服務(wù)器的URL地址;第2個(gè)參數(shù)是服務(wù)器響應(yīng)成功的回調(diào);第3個(gè)參數(shù)是服務(wù)器響應(yīng)失敗的回調(diào)。7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器【例7-3】應(yīng)用Volley框架從Web服務(wù)器讀取JSON數(shù)據(jù)。自己搭建一個(gè)Web服務(wù)器存放jsonData.json文件。文件內(nèi)容如下:{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云轉(zhuǎn)陰","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}布局效果7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器【例7-3】應(yīng)用Volley框架從Web服務(wù)器讀取JSON數(shù)據(jù)。檢查配置文件,確保網(wǎng)絡(luò)權(quán)限:<uses-permissionandroid:name="android.permission.INTERNET"/>運(yùn)行程序時(shí)首先啟動(dòng)Web服務(wù)器,檢查網(wǎng)址/test/jsonData.json有效,再運(yùn)行Android程序。

Android訪(fǎng)問(wèn)本機(jī)的ip地址是http:///test/jsonData.json7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計(jì)7.2基于HTTP的網(wǎng)絡(luò)程序設(shè)計(jì)7.3應(yīng)用Volley框架訪(fǎng)問(wèn)Web服務(wù)器7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)章目錄7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)解析來(lái)自網(wǎng)絡(luò)的JSON數(shù)據(jù),提取有用的信息。Volley的使用步驟不變,由于傳回的數(shù)據(jù)是JSON數(shù)據(jù),監(jiān)聽(tīng)器Response.Listener中方法onResponse(…)的參數(shù)是JSONObject類(lèi)型,直接用getJSONObject(…)方法即可獲得鍵值對(duì)的值,程序變得更加簡(jiǎn)潔。{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云轉(zhuǎn)陰","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}Response.Listeneralistener=newResponse.Listener<JSONObject>(){@OverridepublicvoidonResponse(JSONObjectresponse){try{JSONObjectmj=response.getJSONObject(...);Stringstr=newString(mj.getString(...));

}catch(JSONExceptione){...}}......7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)解析JSON數(shù)據(jù),提取有用的信息city=北京,cityid=101010100,temp1=18℃,temp2=31℃,weather=多云轉(zhuǎn)陰,ptime=18:00{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"18℃","temp2":"31℃","weather":"多云轉(zhuǎn)陰","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}創(chuàng)建Request對(duì)象創(chuàng)建JsonObjectRequest對(duì)象,需要三個(gè)參數(shù):第1個(gè)參數(shù)是目標(biāo)服務(wù)器的URL地址;第2個(gè)參數(shù)是服務(wù)器響應(yīng)成功的回調(diào);第3個(gè)參數(shù)是服務(wù)器響應(yīng)失敗的回調(diào)。JsonObjectRequestrequest=newJsonObjectRequest(

//第1個(gè)參數(shù),目標(biāo)服務(wù)器的URL地址

url,

//第2個(gè)參數(shù),服務(wù)器響應(yīng)成功的回調(diào)

newResponse.Listener<JSONObject>(){@OverridepublicvoidonResponse(JSONObjectresponse){//成功的處理

}},

//第3個(gè)參數(shù),服務(wù)器響應(yīng)失敗的回調(diào)

newResponse.ErrorListener(){

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論