Volley的框架解讀一(Http的封裝)

2021-08-08 07:20:42 字數 3640 閱讀 3511

先瞄瞄uml類圖

在volley中真正的網路請求是由httpstack定義的,這是乙個介面,它唯一的乙個方法就是執行網路請求獲取響應。而httpclientstack和hurlstack是該介面的實現類,對應不同的網路請求的底層實現,httpclientstack是基於httpclient的,hurlstack是基於httpurlconnection的。

先看看這個父介面(httpstack)

原始碼解讀絕招一:看父類,介面,這樣你才知道這個類是幹啥的,應該有什麼行為
/**

* volley中真正去執行聯網的類,返回的資訊封裝成httpresponse

volley本來是支援httpurlconnection,還有httpclient的,當然處於現在這個年代,httpclient被廢棄了,所以只看httpurlconnection的封裝

另外說一點volley中的request,從字面理解上是請求,但是其實不是乙個真正的網路請求,個人理解為是對真正的網路請求的各個屬性的描述。

httpstack是真正的網路請求,request則是封裝了超時時間、請求方式、引數、url等網路請求所必須的引數。通過變換不同的屬性引數(最基本的如請求方式get post),可以獲取不同的網路請求。

ok,現在在說下我對於httpclientstack和hurlstack的理解,二者的工作思路是這樣的:

1. 首先從volley的request內獲取各個屬性、如超時間、請求方式、引數和url

2.建立網路請求,httpclientstack是建立httpclient ,hurlstack是建立httpurlconnection

3.對網路請求設定各個屬性引數

4.定義執行網路請求的方法,並獲取響應,將響應返回出去

上面說的是思路,現在看一下原始碼細節是怎麼寫的,一些得從performrequest開始

原始碼細節performrequest

//1.得到乙個httpurlconnection

//2.設定響應頭

for (string headername : map

.keyset())

//3.設定請求方式

setconnectionparametersforrequest(connection, request);

//4.響應的協議版本

//5.獲取狀態碼

int responsecode = connection.getresponsecode();

if (responsecode ==

-1)

//6.根據鏈結獲取響應的狀態碼響應資訊

statusline responsestatus =

new basicstatusline(protocolversion,

connection.getresponsecode(), connection.getresponsemessage());

//建立響應

//給響應設定響應體,響應體來自於鏈結

response.setentity(entityfromconnection(connection));

//將得到的頭資訊賦值給實體類(basichttpresponse)

for (entry<

string, list

<

string

>>

header : connection.getheaderfields().entryset())

}return response;

}看傳入引數request,裡面有設定了很多http的屬性,如超時,是否快取,還有乙個引數設定頭資訊

再看看其中幾個重要方法

openconnection封裝細節

/**

* 設定httpurlconnection 一些引數以及支援https

}

沒啥好說的就是建立了httpurlconnection,設定一些屬性

entityfromconnection封裝細節

/**

* 將connection得到的資訊封裝成實體(basichttpentity)返回

}

這裡就是從httpurlconnection獲取介面資訊,封裝成httpentity,返回給呼叫者basicnetwork

volley的真正的網路請求就是這些了,注意這裡是定義網路請求和網路請求的方法,但是呼叫執行網路請求其實是在network介面及其實現類basicnetwork內。

如果對於httpurlconnection 不太了解,或者忘記的差不對了可以看看我前面文章

volley的框架解讀準備一httpurlconnection

Volley框架的使用

volley請求框架真的很簡單,分幾步就可以搞定了。2 使用requestmanager。乙個網路post請求方法 1 post url 網路請求url 2 post json 網路請求json引數。loadcontroler mloadcontroler requestmanager.getins...

Volley框架的學習

在學習郭霖前輩的部落格 後自己做的簡要學習筆記,為的是提煉下思路,在心裡能有個整體的框架。由淺入深 一 stringrequest使用步驟 1 定義訊息佇列 requestqueue 2 定義stringrequest,傳入 監聽方法等 3 用佇列載入請求 add方法 二 imagerequest使...

volley框架的使用

volley框架提供了stringrequest imagerequest jsonobjectrequest stringrequest有兩種請求方式get,post兩種方式,用post方式請求可以給伺服器傳遞引數 requestqueue queue volley.newrequestqueue...