Android http(第二十五節課)
阿新 • • 發佈:2021-02-19
技術標籤:android
第二十五節課
http
.HTTP ( Hyper Text Transfer Protocol)
協議即超文字傳輸協議,它規定了瀏覽器和全球資訊網伺服器之間互相通訊的規則。
從圖中可以看出,使用手機客戶端訪問百度時,會發送一個HTTP請求。當伺服器端接收到這個請求後,會做出響應並將百度頁面返回給客戶端
瀏覽器。這個請求和響應的過程實際上就是HTTP通訊的過程。
·一次HTTP請求的過程
·建立連線-→傳送請求-→處理請求-→返回資料-→傳送請求2-……關閉連線
.HTTP請求的常用方式
GET
. POST
.HTTP請求的格式
請求頭
·請求體
HTTP響應的格式
響應行(包含響應碼:200404500302)。
響應頭
·響應體
GET方式和POST方式提交資料
- HITP/1.1協議中共定義了八種方法來表明Request-URI指定的資源的不同操作方式。其中最常用的兩種請求方式是GET和POST。
- GET方式與POST方式的區別
- GET方式以實體的方式得到由請求URL所指向的資源資訊,向伺服器提交
的引數跟在請求URL後面。使用GET方式訪問網路UAL的長度是有限制的。請求URL的長度耍小於1K。 - POST方式用來向目的伺服器發出請求.要求它接收被附在請求後的實體。它向伺服器我交的引數在請求後的實體中,POST方式對URL的長度是沒有限制的
- URL:包含請求地址的類
-tRil(path):包含請求路徑的構造方法- openConnectionO:很到連線物件
2.HttpURLConnection:代表與伺服器連線的類
- setRequestMethod(“GET/POST" ):設定請求方式
setDoInput (true/ false):設定可以讀取伺服器瑞返回的資料
setDo0utput(true/false):設定可以向伺服器芒寫入資料
setConnectTimeout(time):設定連線超時時間,單位為ms
setReadTimeout (time):設定讀取伺服器返回資料的時間-connecto :連線伺服器 - int getResponseCodeO:得到伺服器返回的結果碼
Int getContentLengthO:得到伺服器返回資料的長度(位元組)getOutputStreamO:返回一個指向伺服器端的資料輸出流
getInputStreamo:返畫一個從伺服器端返回的致據輸入流
disconnectO :斷開連線
1.HttpURLConnection
<?xm1 version="1.0"" encoding="utf-8""?>
<network-security-config>
<domain-config>
<domain includesubdomains="true"">https : / /www.baidu.com/</domain>epin-set expiration="2020-08-01"">
pin digest="SHA-256"">7HIpactkIAq2Y49orFOoQKurwxmmSFzhBcoQvcRh33Y=</pin><!-- backup pin -->
pin digest=""SHA-256">fwzaOLRMKouZHRC8E1+4Pyu1dPDcf3uKgo/04cDM1oE=</pin></pin-set>
</domain-config>
</network-security-config>
Handler訊息機制
·在使用手機下載軟體時,通常都能在介面上看到一個下載的進度條,這個進度條用來表示當前下載的進度。但是Android4.0以後不能在UI執行緒訪問網路,而子執行緒也不能更新UI介面。為了根據下載進度實時更新UI介面,就需要用到Handler訊息機制來實現執行緒間的通訊。
- Handler機制主要包括四個關鍵物件,分別是:Message、Handler、
MessageQueue、Looper。 - Handler
- Handler主要用於傳送訊息和處理訊息。一般使用Handelr物件的
sendMessage()方法傳送訊息,訊息經過一系列處理後,最終會傳遞到Handler的handlerMessage()方法中。
·傳送即時訊息: sendMessage(Message msg)
·傳送延時訊息: sendMessageDelayed(Message msg, long time)·處理訊息: handleMessage(Message msg)(回撥方法)
·移除還未處理的訊息: removeMessages[int what)
MessageQueue - MessageQueue是訊息佇列的意思,它主要用來存放通過Handler傳送的訊息。通過Handler傳送的訊息會存在MessageQueue中等待處理。它是一個按Message的when排序的優先順序佇列。(when:代表著被處理的時間)
Looper - Looper是每個執行緒中的MessageQueue的管家。呼叫Looper的loop()方法後,就會進入到一個無線迴圈中。然後一發現MessageQueue中存在一條訊息,就會將它取出,並傳遞到Handler的HandlerMessage()方法中。
·使用Handler的一般步驟
1.建立Handler成員變數物件,並重寫其handleMessage()2.在分/主執行緒建立Message物件
3.使用handler物件傳送Message學
4.在handleMessage()中處理訊息
Handler訊息處理首先需要線上程建立一handler物件,然後在子執行緒中呼叫Hanlder的sendMessage()方法,接著這個訊息會存放在UI執行緒的MessageQueue中,通過Looper物件取出MessageQueue中的訊息,最後分發回Hanlder的handleMessage()方法中。