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

下載本文檔

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

文檔簡介

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

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

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

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

和getInputStream()

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

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

.detectDiskReads() //當發(fā)生磁盤讀操作時輸出

.detectDiskWrites() //當發(fā)生磁盤寫操作時輸出

.detectNetwork()//訪問網(wǎng)絡(luò)時輸出,包括磁盤讀寫和網(wǎng)絡(luò)I/O.penaltyLog() //以日志方式輸出

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

//構(gòu)造strictModeVW虛擬機對象

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

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

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

:

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

{

publicvoidhandleMessage(Messagemsg){

super.handleMessage(msg);

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

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

}

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

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

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

url,

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

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

//成功的處理

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

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

//失敗的處理

}});創(chuàng)建StringRequest對象,需要三個參數(shù):第1個參數(shù)是目標服務(wù)器的URL地址;第2個參數(shù)是服務(wù)器響應(yīng)成功的回調(diào);第3個參數(shù)是服務(wù)器響應(yīng)失敗的回調(diào)。7.3應(yīng)用Volley框架訪問Web服務(wù)器【例7-3】應(yīng)用Volley框架從Web服務(wù)器讀取JSON數(shù)據(jù)。自己搭建一個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框架訪問Web服務(wù)器【例7-3】應(yīng)用Volley框架從Web服務(wù)器讀取JSON數(shù)據(jù)。檢查配置文件,確保網(wǎng)絡(luò)權(quán)限:<uses-permissionandroid:name="android.permission.INTERNET"/>運行程序時首先啟動Web服務(wù)器,檢查網(wǎng)址/test/jsonData.json有效,再運行Android程序。

Android訪問本機的ip地址是http:///test/jsonData.json7.1基于WebKit的網(wǎng)絡(luò)程序設(shè)計7.2基于HTTP的網(wǎng)絡(luò)程序設(shè)計7.3應(yīng)用Volley框架訪問Web服務(wù)器7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)章目錄7.4應(yīng)用Volley框架解析JSON數(shù)據(jù)解析來自網(wǎng)絡(luò)的JSON數(shù)據(jù),提取有用的信息。Volley的使用步驟不變,由于傳回的數(shù)據(jù)是JSON數(shù)據(jù),監(jiān)聽器Response.Listener中方法onResponse(…)的參數(shù)是JSONObject類型,直接用getJSONObject(…)方法即可獲得鍵值對的值,程序變得更加簡潔。{"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對象創(chuàng)建JsonObjectRequest對象,需要三個參數(shù):第1個參數(shù)是目標服務(wù)器的URL地址;第2個參數(shù)是服務(wù)器響應(yīng)成功的回調(diào);第3個參數(shù)是服務(wù)器響應(yīng)失敗的回調(diào)。JsonObjectRequestrequest=newJsonObjectRequest(

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

url,

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

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

}},

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

newResponse.ErrorListener(){

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論