概述
本篇介紹響應相關的類,包括NetworkResponse
,Response
,ResponseDelivery
,ExecutorDelivery
。
Part 1 ——NetworkResponse
表示網絡請求返回的原始結果,比較簡單,主要屬性有:
int statusCode
:狀態碼byte[] data
:返回結果的主體部分Map<String, String> headers
:返回結果的頭boolean notModified
:如果服務器返回304
,則該變量爲true
,說明服務器數據在上次請求後沒有變化long networkTimeMs
:此次網絡請求花費的總時間
Part 2 ——Response
表示NetworkResponse
經過parse之後的響應,定義了內部接口Response<T>$Listener<T>
和Response<T>$ErrorListener
,分別負責響應結果和響應錯誤的回調。
主要屬性有:
T result
:最終的返回結果
Cache.Entry cacheEntry
:緩存元信息
VolleyError error
:錯誤信息
如果正常返回,則error
爲null
,否則,result
和cacheEntry
爲null
。
Part 3 ——ResponseDelivery
處理返回結果的接口,定義了三個抽象方法:
public void postResponse(Request<?> request, Response<?> response);
public void postResponse(Request<?> request, Response<?> response, Runnable runnable);
public void postError(Request<?> request, VolleyError error);
postResponse()
用於處理正確的返回,postError()
用於處理錯誤的返回。
Part 4 ——ExecutorDelivery
這是Volley
中Delivery
的默認實現。
內部類ResponseDeliveryRunnable
定義了內部類ExecutorDelivery$ResponseDeliveryRunnable,該類繼承了Runnable,其run()方法負責處理相關的回調,該Runnable並不會被直接調用,而是會被髮送到主線程的消息隊列中,等待主線程處理。它的構造函數爲:
public ResponseDeliveryRunnable(Request request, Response response, Runnable runnable);
其中第三個參數runnable
是對該請求需要做的額外處理,如果沒有則傳入null
即可。
執行器
維護了執行器Executor mResponsePoster
,重寫了execute()方法,唯一功能是將前述的Runnable
對象發送到Handler
所對應的消息隊列,在Volley
的默認實現中,該Handler
爲主線程的Handler
。
注意:這只是一個
Executor
接口,不是線程池,不會產生新的線程,它只負責把構造出來的Runnable
對象發送給主線程,僅此而已。
重寫的方法
既然實現了ResponseDelivery
接口,顯然要重寫三個抽象方法,具體很簡單,要做的就是調用mResponsePoster
的execute()
,把相應的Runnable
發送到主線程。