Volley詳解(三)——響應(Response)

概述

本篇介紹響應相關的類,包括NetworkResponseResponseResponseDeliveryExecutorDelivery

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:錯誤信息

如果正常返回,則errornull,否則,resultcacheEntrynull

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

這是VolleyDelivery的默認實現。

內部類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接口,顯然要重寫三個抽象方法,具體很簡單,要做的就是調用mResponsePosterexecute(),把相應的Runnable發送到主線程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章