2014-02-07 345 views
9

如果Android Volley發佈請求由於網絡丟失而失敗,則Android Volley會在網絡連接自動恢復後重試帖子嗎?它是否會觸發所有的請求嘗試,等待連接重新建立或者只是觸發錯誤並停止?Android Volley如何處理暫時丟失的網絡連接?

如果Android Volley在重新建立連接後沒有重試,似乎我將不得不創建邏輯,以便每當連接丟失時都有一個額外的隊列,並且每當連接狀態改變時都會重試。

回答

7

If an Android Volley post request fails due to network loss, will Android Volley retry the post after the network connection is restored automatically?

不,它不會。根據您的應用程序,我可能甚至不期望。

Will it fire all of the request attempts, wait for connection to reestablish or simply trigger an error and stop?

它只是拋出一個錯誤。是的,你應該自己寫這種邏輯。

9

this鏈接:

有指定的凌空請求超時值沒有直接的方法,但有一種變通方法,您需要設置一個RetryPolicy請求對象。 DefaultRetryPolicy類接受一個名爲initialTimeout的參數,這可以用來指定請求超時,確保最大重試計數爲1,這樣volley在超過超時後不再重試請求。

Setting Request Timeout: 

request.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f)); 

如果要重試失敗的請求(由於超時),您可以指定過使用上面的代碼,只是增加的重試次數。請注意最後一個參數,它允許您指定一個可用於實現某些RESTful服務推薦的「指數退避」的退避乘數。

該鏈接有很多有用的技巧和竅門使用Volley。希望這可以幫助!

+0

是的,我同意你可以將超時設置得高一些(20秒你的情況)。但是,當我遇到網絡丟失時,我收到以下消息:02-07 14:44:36.550:E/request(16590):錯誤:java.net.SocketException:recvfrom失敗:ETIMEDOUT(連接超時)。我直接得到這個,而不是在請求超時之後。我也只有這一次。 –

+0

您是否嘗試訪問其他服務器以查看問題是否是服務器端? –

+0

服務器是專門用於測試此功能的服務器;)。所以基本上它會向每個帖子請求發送一個幾乎空白的迴應,沒有什麼奇特的 –

3

萬一一個IOException出現(例如java.net.ConnectException),排球確實使用重試策略。 Volley在SocketTimeoutException,ConnectTimeoutException或HTTP響應代碼爲401(禁止)或302(永久移動)的情況下僅使用重試策略。

0

如果你使用(AsyncHttpClient),你可以嘗試把這種梅索德:

setMaxRetriesAndTimeout(int retries, int timeout) 
Sets the maximum number of retries and timeout for a particular Request. 
* 
* @param retries maximum number of retries per request 
* @param timeout sleep between retries in milliseconds 
*/ 
相關問題