先瞄瞄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...