版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 陜西機(jī)電職業(yè)技術(shù)學(xué)院《可視化設(shè)計(jì)1》2023-2024學(xué)年第一學(xué)期期末試卷
- 深圳報(bào)建合同范例
- 建筑項(xiàng)目貸款合同范例
- 外來(lái)員工勞動(dòng)合同范例
- 門(mén)轉(zhuǎn)讓合同范例
- 公司土方出售合同范例
- 二建解聘合同范例
- 發(fā)票附帶采購(gòu)合同范例
- 糞便銷(xiāo)售合同范例
- 招聘文員合同范例
- 傳承家風(fēng)家訓(xùn)PPT弘揚(yáng)傳統(tǒng)文化PPT課件(帶內(nèi)容)
- 2.0MWp屋頂太陽(yáng)能分布式光伏發(fā)電項(xiàng)目監(jiān)理大綱2
- 灌入式復(fù)合路面施工指南
- 2023級(jí)高數(shù)(上)試卷及答案
- 高中數(shù)學(xué)公開(kāi)課優(yōu)質(zhì)課1.3.0探究與發(fā)現(xiàn)“楊輝三角”中的一些秘密【市一等獎(jiǎng)】?jī)?yōu)質(zhì)課
- 100KW分布式光伏電站設(shè)計(jì)方案
- 2010版GMP附錄:計(jì)算機(jī)化系統(tǒng)整體及條款解讀(完整精華版)
- 網(wǎng)吧企業(yè)章程范本
- 商業(yè)綜合體、購(gòu)物中心、百貨商場(chǎng)商業(yè)運(yùn)營(yíng)項(xiàng)目收益測(cè)算模板
- 丙烯儲(chǔ)罐畢業(yè)設(shè)計(jì)
- 水工建筑物水泥灌漿施工技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論