天天看點

對于Android的http請求的異常管理

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關鍵字 

不管是請求成功,還是失敗,都需要關閉連結。

繼續閱讀