http://www.open-open.com/lib/view/open1327556868217.html
在android項目中,如果有用到http請求,就必須也應該加上http請求的逾時管理,異常管理,項目中遇到這個需求,google上搜尋到了一大堆,但是寫的都比較簡單,做個demo還行,用在項目中還是不夠完善。自己寫了一個例子,有不完善之處,歡迎大家指正。
需要注意的地方:有三個方面
如何控制逾時機制
如何處理異常
如何處理請求錯誤的
這是一個異步任務類,發送get請求請求資料,解析伺服器的響應資料,同時通知ui線程更新ui
在android中,網際網路互動的寫法有很多,可以使用apache提供的包,也可以使用google提供的api,我不知道那種更好,隻是習慣于使用
apache的api。
1. 設定逾時機制
這裡設定了兩種逾時,第一種是請求逾時,第二種時連接配接逾時。
當向伺服器送出請求後,請求和伺服器建立socket連接配接,但是很長時間内都沒有建立socket連接配接,這就時第一種請求逾時,這種情況主要發生在請求了
一個不存在的伺服器。逾時之後,會抛出interruptedioexception異常。
timeout for blocking operations. the argument value is specified in
milliseconds. an interruptedioexception is thrown if this timeout
expires.
用戶端已經與伺服器建立了socket連接配接,但是伺服器并沒有處理用戶端的請求,沒有相應伺服器,這就是第二種連接配接逾時。這中逾時會抛出
connecttimeoutexception異常,connecttimeoutexception繼承自interruptedioexception,是以隻要捕獲connecttimeoutexception
就可以了。
2. 分析一下請求的過程
2.1 httpresponse response = mhttp.execute(mget);
執行請求方法,擷取伺服器響應,(這裡有個不太成熟的看法,response不可能為null,還有待驗證)。
2.2 擷取請求響應碼
即使連接配接上伺服器,并且從伺服器上擷取了資料,也有可能時伺服器傳回的錯誤資訊,是以也需要特殊處理。
2.3 異常處理
對于異常,不能簡單的捕獲就完事,例如上面的代碼中,我請求第三頁的資料,如果發生異常,請求不成功,那麼我就需要讓目前頁數復原,
如果成功了就不用復原了,是以需要對異常進行處理
2.4 finally關鍵字
不管是請求成功,還是失敗,都需要關閉連結。