版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、鄭州大學信息工程學院第六章 Android網(wǎng)絡應用點擊添加文本鄭州大學信息工程學院6.1 Http通信6.2 Socket通信6.3 使用WebView顯示網(wǎng)頁6.4 項目實戰(zhàn):查詢員工信息6.5 本章小結6.1 HTTP通信1Http協(xié)議簡介2Http請求方式3HttpURLConnection接口4HttpClient接口Http協(xié)議簡介Http(Hypertext Transfer Protocol),是Web互連網(wǎng)的基礎,它是建立在TCP協(xié)議之上的一種客戶端/服務器端協(xié)議。Http連接的工作過程是客戶端發(fā)送的Http請求,等待服務器接收請求回送響應,客戶端解析、處理返回的信息。Http
2、連接是一種“短連接”、“無狀態(tài)”。客戶端向服務器請求服務時,須聲明請求相應的行為。請求方法常用的有Get、Post兩種。Http請求方式-Get方式Get方式是將傳遞的參數(shù)以某種數(shù)據(jù)串的方式顯示的追加到提交的URL后面,傳遞的數(shù)值封裝在傳值變量中,通過傳值變量來獲取傳遞的值。傳值數(shù)據(jù)串與URL地址之間以?號間隔,數(shù)據(jù)串傳遞參數(shù)的形式是name=value,name為傳值變量,value為傳遞的值。如:GET/signup/signup.php?inviteCode=2388493434Get方式傳遞參數(shù)數(shù)據(jù)量較小,安全性非常低。Http請求方式-Post方式Post請求可以向服務器傳送數(shù)據(jù),而
3、且數(shù)據(jù)放在HTML HEADER內一起傳送到服務端URL地址,數(shù)據(jù)對用戶不可見。Post傳輸方式不在URL里傳遞,也正好解決了get傳輸量小、容易篡改及不安全等一系列不足。HttpURLConnection接口HttpURLConnection接口是繼承于URLConnection類,二者都是抽象類,通過URL的openConnection()方法獲得HttpURLConnection對象。 代碼如下所示: URL url = new URL(URL地址); HttpURLConnection urlConn=(HttpURLConnection)url.openConnection();Ht
4、tpURLConnection接口HttpURLConnection在URLConnection的基礎上發(fā)送Http請求獲取資源常用方法:void setDoInput():設置URLConnection的doInput字段的值,值為true或者false。如果使用URL連接進行輸入,設為true,反之,則設為false。void setDoOutput():設置URLConnection的doOutput字段的值,值為true或者false。如果使用URL連接進行輸出,設為true,反之,則設為false。InputStream getInputStream():獲取URL連接的輸入流,從而
5、獲取響應的內容。OutputStream getOutputStream():獲取URL連接的輸出流,從而傳遞參數(shù)給服務器。HttpURLConnection接口void setUseCaches():設置URL連接的useCaches字段。void setInstanceFollowRedirects():設置是否應該自動執(zhí)行 http 重定向。void setRequestProperty(String key,String value):設置一般請求屬性。int getResponseCode():獲取服務器的響應代碼。String getResponseMessage():獲取服務器的
6、響應信息。String getResquestMessage():獲取發(fā)送請求的方法。void setRequestMethod():設置請求方式。HttpURLConnection接口HttpURLConnection請求獲取URL引用的資源步驟(1)創(chuàng)建HttpURLConnection對象;(2)設置請求的屬性和對象參數(shù);(3)如果是Get方式請求,由于HttpURLConnection默認使用Get方式,因此直接調用connect()方法即可建立連接;如果是以Post方式請求,則需要設置請求方式為Post。注:涉及到訪問網(wǎng)絡時,需要在項目的配置文件AndroidManifest.xml
7、文件中須添加訪問網(wǎng)絡的權限HttpClient接口使用HttpClient發(fā)送請求、接收響應步驟:(1)創(chuàng)建HttpClient對象。(2)創(chuàng)建請求方法的實例,并指定請求URL。 如果需要發(fā)送GET請求,創(chuàng)建HttpGet對象; 如果需要發(fā)送POST請求,創(chuàng)建HttpPost對象。(3)設置參數(shù)。調用setParams(HetpParams params)方法來添加請求參數(shù);HttpPost對象可調用setEntity(HttpEntity entity)方法來設置參數(shù)。(4)發(fā)送請求獲取響應。HttpResponse httpResponse=client.execute(http);/發(fā)送
8、請求,返回Http響應HttpClient接口(5)獲取信息。調用HttpResponse相應的方法可獲取服務器返回的信息;調用HttpResponse的getEntity()方法可獲取HttpEntity對象;調用EntityUtils.toString()方法獲取封裝在HttpEntity對象中的服務器的響應內容。(6)釋放連接。Get方法;Post方法(使用NameValuePair來保存要傳遞的參數(shù),并設置所使用的字符集)。Android 6.0拋棄HttpClientAndroid6.0 SDK中刪除HttpClient的相關類設置android SDK的編譯版本為23時,且使用了h
9、ttpClient相關類的庫項目:如android-async-http等等,會出現(xiàn)有一些類找不到的錯誤。解決辦法:修改gradle構建文件useLibrary org.apache.http.legacy6.2 Socket通信1Socket簡介2使用基于TCP協(xié)議的Socket進行通信3使用基于UDP的Socket通信Socket簡介Socket是一種抽象層,通信兩端通過它來發(fā)送和接收數(shù)據(jù)。Socket提供了應用程序與外界通信的端口并為通信雙方的提供了數(shù)據(jù)傳輸通道。Socket的主要特點:數(shù)據(jù)丟失率低,使用簡單且易于移植。Socket有兩種傳輸模式:面向連接和無連接。不講,其他課程已講過S
10、ocket的兩種傳輸模式的區(qū)別面向連接模式使用TCP協(xié)議,在通信兩端建立通信鏈路,依次發(fā)送和接收數(shù)據(jù)。無連接模式使用UDP協(xié)議,將數(shù)據(jù)進行打包發(fā)送。無連接模式接收端接收數(shù)據(jù)包的順序與發(fā)送端發(fā)送的順序是不一樣的,而且數(shù)據(jù)安全性欠佳。使用基于TCP協(xié)議的Socket進行通信1、TCP簡介TCP(Transmission Control Protocol,傳輸控制協(xié)議),是一種面向連接的、可靠的、基于字節(jié)流的運輸層(Transport layer)通信協(xié)議。在簡化的計算機網(wǎng)絡OSI模型中,TCP完成第四層傳輸層所指定的功能。應用層向傳輸層層發(fā)送用于網(wǎng)絡間傳輸?shù)臄?shù)據(jù)流,然后TCP把數(shù)據(jù)流分割成適當長度
11、的報文段,之后TCP把結果包傳給IP層,由它來通過網(wǎng)絡將包傳送給接收端實體的TCP層。使用基于TCP協(xié)議的Socket進行通信2、基于TCP的Socket通信步驟(1)創(chuàng)建TCP服務器端。ServerSocket(int port):指定端口號(port)來創(chuàng)建ServerSocket對象。ServerSocket(int port,in backlog):增加改變連接隊列的參數(shù)backlog。ServerSocket(int port,int backlog,InetAddress localAddr):增加IP地址參數(shù)localAddr,用來指定將ServerSocket綁定到指定的IP地
12、址。(2)等待客戶端請求。一個服務器應該可以循環(huán)調用accept()方法不斷接收客戶端請求使用基于TCP協(xié)議的Socket進行通信(3)服務器端接收請求,返回響應。accept()方法在沒有數(shù)據(jù)進行接收的處于堵塞狀態(tài)。接收數(shù)據(jù)時,可以通過InputStream讀取接收的數(shù)據(jù),OutputStream返回響應數(shù)據(jù)。(4)客戶端發(fā)送請求,獲取返回信息。服務器端創(chuàng)建ServerSocket對象等待客戶端請求;客戶端創(chuàng)建一個指定服務器端IP地址和端口號的Socket對象,通過InputStream讀取數(shù)據(jù)、OutputStream寫入數(shù)據(jù)。使用基于UDP的Socket通信1、UDP簡介UDP(User
13、 Datagram Protocol,用戶數(shù)據(jù)包協(xié)議),是簡化的計算機網(wǎng)絡OSI模型中一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務。UDP的缺點是不提供數(shù)據(jù)報分組、組裝和不能對數(shù)據(jù)包排序UDP的優(yōu)點是在傳輸數(shù)據(jù)包前不用在客戶端和服務器之間建立一個連接,且沒有超時重發(fā)等機制,因此傳輸速度很快。使用DatagramSocket創(chuàng)建UDP服務器端步驟(1)創(chuàng)建DatagramSocket對象。DatagramSocket():創(chuàng)建DatagramSocket實例,并將該對象綁定到本機默認IP地址、本機所有可用端口中隨機選擇的某個端口。DatagramSocket(int prot):
14、創(chuàng)建DatagramSocket實例,并將該對象綁定到本機默認IP地址、指定端口。DatagramSocket(int port, InetAddress laddr):創(chuàng)建DatagramSocket實例,并將該對象綁定到指定IP地址、指定端口。(2)創(chuàng)建DatagramPacket對象。(3)接收數(shù)據(jù)。getData()方法獲取數(shù)據(jù)緩沖區(qū);getOffset()方法獲取數(shù)據(jù)起始位置;getLength()方法獲取數(shù)據(jù)長度。使用DatagramSocket創(chuàng)建UDP客戶端步驟(1)客戶端創(chuàng)建指定監(jiān)聽端口的DatagramSocket對象。DatagramSocket socket = new
15、 DatagramSocket(10000);/需指定端口號(2)創(chuàng)建InetAddress對象。InetAddress serverAddress = InetAddress.getByName(“192.168.101”);/將IP地址字符串轉化為要發(fā)送請求的網(wǎng)絡地址(3)創(chuàng)建DatagramPacket對象。DatagramPacket packet = new DatagramPacket(data, data.length ,serverAddress , 10000); /4個參數(shù)分別是數(shù)據(jù)包、數(shù)據(jù)包長度、要發(fā)送的地址以及端口號(4)發(fā)送數(shù)據(jù)。socket.send(packet)
16、; /調用send()方法發(fā)送數(shù)據(jù)Http與Socket通信區(qū)別Http連接使用的是“請求響應方式”,即在請求時建立連接通道,當客戶端向服務器發(fā)送請求后,服務器端才能向客戶端返回數(shù)據(jù)。Socket通信則是在雙方建立起連接后就可以直接進行數(shù)據(jù)的傳輸,在連接時可實現(xiàn)信息的主動推送,而不需要每次由客戶端向服務器發(fā)送請求。Android網(wǎng)絡開發(fā)注意事項編寫本章的網(wǎng)絡程序時,網(wǎng)絡任務不能放在主線程中執(zhí)行,否則會報異?!癮ndroid.os.NetworkOnMainThreadException”需要使用線程編程技術解決該異常,或者使用安卓的AsyncTask類GUI的線程同步(AsyncTask)An
17、droid AsyncTaskAndroid的AsyncTask是一個輕量級異步處理類。public abstract class AsyncTask AsyncTask定義了三種泛型類型 Params,Progress和Result。Params 啟動任務執(zhí)行的輸入?yún)?shù),比如HTTP請求的URL。Progress 后臺任務執(zhí)行的百分比。Result 后臺執(zhí)行任務最終返回的結果,比如String。在特定場合下,并不是所有類型都被使用,如果沒有被使用,可以用java.lang.Void類型代替。Android AsyncTask一個異步任務的執(zhí)行一般包括以下幾個步驟:1.execute(Para
18、ms. params),執(zhí)行一個異步任務。2.onPreExecute(),在execute(Params. params)被調用后立即執(zhí)行,一般用來在執(zhí)行后臺任務前對UI做一些標記。3.doInBackground(Params. params),在onPreExecute()完成后立即執(zhí)行,用于執(zhí)行較為費時的操作,此方法將接收輸入?yún)?shù)和返回計算結果。4.onProgressUpdate(Progress. values),在調用publish Progress (Progress. values) 時,此方法被執(zhí)行,直接將進度信息更新到UI組件上。5.onPostExecute(Resul
19、t result),當后臺操作結束時,此方法將會被調用,直接將計算結果顯示到UI組件上。Android AsyncTask在使用的時候,有幾點需要格外注意:1.異步任務的實例必須在UI線程中創(chuàng)建。2.execute(Params. params)方法必須在UI線程中調用。3.不要手動調用onPreExecute(),doInBackground(Params. params),onProgressUpdate(Progress. values),onPostExecute(Result result)這幾個方法。4.不能在doInBackground(Params. params)中更改UI組
20、件的信息。5.一個任務實例只能執(zhí)行一次,如果執(zhí)行第二次將會拋出異常。6.3 使用WebView顯示網(wǎng)頁1、WebView簡介2、WebView加載網(wǎng)頁3、WebView加載HTML代碼4、WebView中使用JavaScriptWebView簡介WebView是一個常用的控件,是內置的瀏覽器控件,我們可以用它來瀏覽網(wǎng)頁、打開文檔等。WebView控件本身就是一個瀏覽器實現(xiàn),它的內核基于開源的WebKit引擎。如:注:要使用WebView控件訪問HTML頁面,需要添加訪問網(wǎng)絡的權限,代碼如下: WebView加載網(wǎng)頁通過WebView可以相當于瀏覽器加載Web頁面,并對頁面實現(xiàn)前進后退等操作。調
21、用loadUrl(String url)方法加載url對應的網(wǎng)頁。如:WebView web = (WebView) findViewById(R.id.webView); web.loadUrl();WebView可以加載本地文件,此時的URL是文件路徑,本地文件存放在assets文件中。如“file:/android_asset/XX.html”。WebView控件提供了大量的方法,例如,goback()后退,goForward()前進等。WebView加載HTML代碼WebView提供一個loadDataWithBaseURL()方法可以直接載入HTML字符串,并對該字符串進行HTML解
22、析。loadDataWithBaseURL()的前3個參數(shù)分別是加載的HTML字符串、HTML代碼的MIME類型以及HTML代碼編碼所用的字符集,其余兩個可以指定該頁面的baseUrl。如:void loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)WebView中使用JavaScriptWebView提供了一個WebSettings管理工具類,該工具用來管理WebView選項設置狀態(tài)。通過getSettings()方法獲得WebView設置的
23、管理對象WebSettings,從而調用setJavaScriptEnabled()方法允許WebView加載的網(wǎng)頁使用JavaScript。調用addJavascriptInterface(Object object, String name)實現(xiàn)將Java對象暴露給JavaScript,其中object為Java對象的實例,name為用戶自定義的名字。WebView中使用JavaScript實現(xiàn)WebView中的JavaScript與Android應用程序交互步驟:(1)創(chuàng)建WebSettings工具類對象。(2)調用setJavaScriptEnabled()方法開啟JavaScript使用(3)調用addJavascriptInterface()方法,創(chuàng)建一個能訪問Java方法接口。6.4項目實戰(zhàn):查詢員工信息任務說明:在用戶界面中輸入要查詢的員工編號,點擊查詢按鈕,向服務器發(fā)送Post請求,并將服務器返回的查詢結果顯示在界面中??蚣苤v解Employee
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年市場營銷策略與實踐題集企業(yè)成功的關鍵因素
- 防腐蝕技術交流與分享方案
- 保溫工程分包管理方案
- 地下排水管道平面布置方案
- 2026年職業(yè)規(guī)劃測試個人興趣與職業(yè)選擇匹配題
- 2026年國際貿易實務專業(yè)知識點精講與自測題
- 2026年外語語言運用與溝通能力實踐題目
- 2026年生態(tài)保護與生態(tài)補償機制試題集
- 2026年工程地質及土壤力學習題解答及自測
- 2026年營養(yǎng)學基礎理論與應用模擬試題
- 鈉、鉀、氯的代謝講解
- 加固專業(yè)承包合同
- 國家職業(yè)技術技能標準 5-01-05-01 中藥材種植員 人社廳發(fā)200994號
- 年終食堂工作總結
- 時間管理與提升工作效率課件
- 職業(yè)教育現(xiàn)代學徒制人才培養(yǎng)模式
- 結直腸癌患者健康教育處方
- 新課標必修數(shù)學5解三角形內容分析及教學建議
- 積分制員工激勵實施方案
- LY/T 2378-2014木質生物質固體成型燃料爐具通用技術條件
- 公務員辭去公職申請表
評論
0/150
提交評論