原文:
Android Volley double post when have slow request
I have a problem with Volley POST request on slow network
這哥們兒遇到的問題,在國內的我同樣遇到了
情況描述:
一直用Volley很正常,調用服務器接口發布內容,成功就發布一條,不成功就沒有;
最近服務器端在接收到我上傳的圖片或視頻之后,做了處理,導致其接收速度和往常一樣,但是對APP端的響應速度延遲了1-3秒,使得發布內容加倍,有時一條,有時兩條三條,
查看log日志,自己手動調用mRequestQueue.add(request)
以及mRequestQueue.start()
的次數始終為1,但是與服務器聯調時,服務器端的確被調用了兩三次;谷歌后得知,這算是volley的一個bug吧(具體應該不算)
相應討論:google groups
解決方案
方案一 對Request設置重試策略時,更改默認超時時間
request.setRetryPolicy( new DefaultRetryPolicy( 500000,//默認超時時間,應設置一個稍微大點兒的,例如本處的500000
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,//默認最大嘗試次數
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT ) );
代碼 :request.setRetryPolicy(new DefaultRetryPolicy(50000,DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
DEFAULT_BACKOFF_MULT:對於請求失敗之后的請求,並不會隔相同的時間去請求Server,不會以線性的時間增長去請求,而是一個曲線增長,一次比一次長,如果backoff因子是2,當前超時為3,即下次再請求隔6S
方案二 在HurlStack中的openConnection方法中,在相應段落增加
connection.setChunkedStreamingMode(0)
PS:在實際項目中,我用了第一種方案,就解決了我的問題。。。