




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第9章網(wǎng)絡(luò)編程9
9.1通過HTTP訪問網(wǎng)絡(luò)9.2JSON數(shù)據(jù)9.3通過OkHttp訪問網(wǎng)絡(luò)3HTTP協(xié)議重點了解掌握2JSON數(shù)據(jù)OkHttp訪問網(wǎng)絡(luò)
1學(xué)習(xí)目標(biāo)第9章網(wǎng)絡(luò)編程9.1通過HTTP訪問網(wǎng)絡(luò)9.2JSON數(shù)據(jù)9.3通過OkHttp訪問網(wǎng)絡(luò)主講內(nèi)容Speechcontent主講內(nèi)容HTTP協(xié)議通信簡介HTTP(HyperTextTransferProtocol)即超文本傳輸協(xié)議,它規(guī)定了瀏覽器和服務(wù)器之間相互通信的規(guī)則。HTTP協(xié)議是一種請求/響應(yīng)式的協(xié)議。當(dāng)客戶端與服務(wù)器端建立連接后,向服務(wù)器端發(fā)送的請求,稱作HTTP請求。當(dāng)服務(wù)器端接收到請求后會做出響應(yīng),稱為HTTP響應(yīng)。9.1.1HTTP協(xié)議通信簡介HTTP協(xié)議通信簡介HTTP三點注意事項:HTTP是無連接HTTP是媒體獨立的HTTP是無狀態(tài)9.1.1HTTP協(xié)議通信簡介發(fā)送HTTP請求訪問百度網(wǎng)站HTTP響應(yīng)返回百度首頁
使用手機客戶端訪問百度時,會發(fā)送一個HTTP請求,當(dāng)服務(wù)器端接收到請求后,會做出響應(yīng)并將百度頁面(數(shù)據(jù))返回給客戶端瀏覽器,這個請求響應(yīng)的過程就是HTTP通信的過程。9.1.1HTTP協(xié)議通信簡介URLurl=newURL("");HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);InputStreamis=conn.getInputStream();conn.disconnect();在URL的構(gòu)造方法中傳入要訪問資源的路徑創(chuàng)建HttpURLConnection對象設(shè)置請求方式設(shè)置超時時間獲取服務(wù)器返回的輸入流關(guān)閉HTTP連接
注意:使用HttpURLConnection對象訪問網(wǎng)絡(luò)時,需要設(shè)置超時時間,防止連接被阻塞時無響應(yīng),影響用戶體驗。9.1.2使用HttpURLConnection訪問網(wǎng)絡(luò)GET和POST請求GET方式是以實體的方式得到由請求URL所指向的資源信息,它向服務(wù)器提交的參數(shù)跟在請求URL后面。使用GET方式訪問網(wǎng)絡(luò)URL的長度一般要小于1K。POST方式向服務(wù)器發(fā)出請求時需要在請求后附加實體。它向服務(wù)器提交的參數(shù)在請求后的實體中,POST方式對URL的長度是沒有限制的。采用POST方式提交數(shù)據(jù)時,用戶在瀏覽器中看不到向服務(wù)器提交的請求參數(shù),因此POST方式要比GET方式相對安全。9.1.2使用HttpURLConnection訪問網(wǎng)絡(luò)Stringpath="00:8080/web/LoginServlet?username="+URLEncoder.encode("zhangsan")+"&password="+URLEncoder.encode("123");URLurl=newURL(path);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);intresponseCode=conn.getResponseCode();if(responseCode==200){InputStreamis=conn.getInputStream();}將用戶名和密碼拼在指定資源路徑后面,并對用戶名和密碼進行編碼獲取到狀態(tài)碼狀態(tài)碼為200,表示訪問成功獲取返回內(nèi)容的輸入流GET方式提交數(shù)據(jù)URLurl=newURL("00:8080/web/LoginServlet");HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("POST");Stringdata="username="+URLEncoder.encode("zhangsan")+"&password="+URLEncoder.encode("123");conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");conn.setRequestProperty("Content-Length",data.length()+"");conn.setDoOutput(true);OutputStreamos=conn.getOutputStream();os.write(data.getBytes());intcode=conn.getResponseCode();if(code==200){InputStreamis=conn.getInputStream();}準(zhǔn)備數(shù)據(jù)并給參數(shù)進行編碼設(shè)置請求頭數(shù)據(jù)提交方式以及提交數(shù)據(jù)的長度,這里是以form表單的方式提交以流的形式將數(shù)據(jù)寫到服務(wù)器上POST方式提交數(shù)據(jù)注意事項
在實際開發(fā)中,手機端與服務(wù)器端進行交互的過程中,避免不了要提交中文到服務(wù)器,這時就會出現(xiàn)中文亂碼的情況。因此,無論是GET方式還是POST方式提交參數(shù)時都要對參數(shù)進行編碼。需要注意的是,編碼方式必須與服務(wù)器解碼方式一致。同樣,在獲取服務(wù)器返回的中文字符時,也需要用指定格式進行解碼。GET和POST請求方式—注意事項9.1.3Handler消息機制主線程A(UI線程)子主線程BHandler對象ActivitysendMessagehandlerMessage9.1.3Handler消息機制Handler消息機制Handler是一種異步回調(diào)機制,主要負責(zé)與子線程進行通信。Handler機制主要包括四個關(guān)鍵對象:Message:消息,它由MessageQueue統(tǒng)一列隊,由Handler處理。Handler:處理者,主要負責(zé)Message的發(fā)送以及處理。MessageQueue:消息隊列,主要用來存放Handler發(fā)送過來的消息,并且按照先入先出的規(guī)則執(zhí)行。Looper:消息循環(huán),不斷的從MessageQueue中抽取Message并執(zhí)行。9.1.3Handler消息機制Message1nextnextnextMessageQueueHandleMessage()回調(diào)disptchMessage()方法發(fā)送新消息取出待處理的消息...Message2MessageNLooperHandler第9章網(wǎng)絡(luò)編程9.2JSON數(shù)據(jù)主講內(nèi)容Speechcontent主講內(nèi)容JSON數(shù)據(jù)特點JSON即JavaScriptObjectNotation(對象表示法),是一種輕量級的數(shù)據(jù)交換格式。JSON是基于純文本的數(shù)據(jù)格式,它可以傳輸String、Number、Boolean類型的數(shù)據(jù),也可以傳輸數(shù)組,或者Object對象。JSON文件的擴展名為.json。JSON分為JSON對象和JSON數(shù)組兩種數(shù)據(jù)結(jié)構(gòu)。9.2JSON數(shù)據(jù)對象結(jié)構(gòu)以“{”開始,以“}”結(jié)束。中間部分由0個或多個以“,”分隔的key:value對構(gòu)成,注意關(guān)鍵字和值之間以“:”分隔。關(guān)鍵字key必須為String類型,值value可以是String、Number、Object、Array等數(shù)據(jù)類型。9.2JSON數(shù)據(jù)數(shù)組結(jié)構(gòu)以“[”開始,以“]”結(jié)束。中間部分由0個或多個以“,”分隔的值的列表組成。值value可以是String、Number、Boolean、null等數(shù)據(jù)類型。9.2JSON數(shù)據(jù)對象包含對象{"name":"zhangsan","address":{ "city":"Beijing", "street":"Xisanqi", "postcode":100096}}對象包含數(shù)組{"name":"zhangsan","hobby":["籃球","羽毛球","游泳"]}注意:使用JSON存儲單個數(shù)據(jù)(如“abc”),一定使用數(shù)組結(jié)構(gòu),因為對象結(jié)構(gòu)必須是由“key:value”的形式構(gòu)成。9.2JSON數(shù)據(jù)兩種解析方式org.jsonAndroidSDK中為開發(fā)者提供的,通過使用JSONObject和JSONArray兩個類完成對JSON數(shù)據(jù)的解析。由Google公司提供的,在使用Gson庫之前,首先需要將gson.jar添加到項目中,然后才能調(diào)用其提供的方法。Gson9.2JSON數(shù)據(jù)解析JSON對象例如,要解析的JSON數(shù)據(jù)如下:使用JSONObject解析JSON對象:{"name":"zhangsan","age":27,"married":true}//json1一個json對象[{"name":"lisi","age":25},{"name":"Jason","age":20}]//json2一個json數(shù)組JSONObjectjsonObj=newJSONObject(json1);Stringname=jsonObj.optString("name");intage=jsonObj.optInt("age");booleanmarried=jsonObj.optBoolean("married");optXXX()方法在解析數(shù)據(jù)時比getXXX()方法更安全,如果對應(yīng)字段不存在,optXXX()方法會返回空值或者0,而getXXX()方法會拋出異常。9.2JSON數(shù)據(jù)解析JSON數(shù)組使用JSONArray解析JSON數(shù)組:JSONArrayjsonArray=newJSONArray(json2);for(inti=0;i<jsonArray.length();i++){JSONObjectjsonObj=jsonArray.getJSONObject(i);Stringname=jsonObj.optString("name");intage=jsonObj.optInt("age");}數(shù)組的解析方法和對象類似,只是將key值替換為數(shù)組中的下標(biāo)。9.2JSON數(shù)據(jù)解析JSON例如,要解析的JSON數(shù)據(jù)如下(與org.json解析數(shù)據(jù)相同):使用Gson庫前,首先需要將gson.jar添加到項目中,并且創(chuàng)建JSON數(shù)據(jù)對應(yīng)的實體類Person1與Person2,需要注意的是,實體類中的成員名稱要與JSON數(shù)據(jù)中的key值一致。{"name":"zhangsan","age":27,"married":true}//json1一個json對象[{"name":"lisi","age":25},{"name":"Jason","age":20}]//json2一個json數(shù)組9.2JSON數(shù)據(jù)解析JSON使用Gson解析JSON對象使用Gson解析JSON數(shù)組Gsongson=newGson();Personperson1=gson.fromJson(json1,Person1.class);Gsongson=newGson();TypelistType=newTypeToken<List<Person2>>(){}.getType();List<Person2>person2=gson.fromJson(json2,listType);將JSON數(shù)據(jù)轉(zhuǎn)換成對象TypeToken是Google提供的一個解析JSON數(shù)據(jù)的類9.2JSON數(shù)據(jù)Get異步請求9.3通過OkHttp訪問網(wǎng)絡(luò)OkHttpClientokHttpClient=newOkHttpClient();Requestrequest=newRequest.Builder().url("/data/sk/101220101.html").build();okHttpClient.newCall(request).enqueue(newCallback(){@OverridepublicvoidonFailure(Callcall,IOExceptione){//失敗回調(diào)
}@OverridepublicvoidonResponse(Callcall,finalResponseresponse)
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 服裝年前活動策劃方案
- 甲狀旁腺功能亢進課件
- 《格列佛游記》2025讀后感文本600字(5篇)
- 2025年保健按摩師(高級技師)職業(yè)技能鑒定理論試卷
- 構(gòu)建新型婚育文化研究
- 2025至2030LNG裝卸系統(tǒng)行業(yè)市場深度研究與戰(zhàn)略咨詢分析報告
- 裝修內(nèi)容運營方案(3篇)
- 患者安全與隱私保護在免陪照護服務(wù)中的實踐
- 2025至2030保險信息化產(chǎn)業(yè)行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 智慧系列活動方案
- 農(nóng)村農(nóng)資采購與供應(yīng)長期合作協(xié)議
- 反假幣培訓(xùn)課件
- 煤炭造價知識培訓(xùn)
- 2025屆遼寧省大連市高新區(qū)英語七年級第二學(xué)期期末學(xué)業(yè)質(zhì)量監(jiān)測模擬試題含答案
- 中山大學(xué)強基校測面試題
- 愛回收培訓(xùn)課件
- 2025年湖南省中考化學(xué)真題(解析版)
- aopa無人機培訓(xùn)管理制度
- 對患者的健康教育制度
- 2025至2030年中國工業(yè)控制軟件行業(yè)市場運行態(tài)勢及前景戰(zhàn)略研判報告
- 中國PSRAM行業(yè)市場供需態(tài)勢及發(fā)展前景研判報告
評論
0/150
提交評論