您好,登錄后才能下訂單哦!
以前上傳文件時(shí)報(bào)這個(gè)異常沒這么在意,這次網(wǎng)絡(luò)不好時(shí)總是報(bào)這個(gè)異常,導(dǎo)致文件上傳失敗,故特意說明一下,報(bào)個(gè)異常的原因還是很多的,今日只針對我當(dāng)前遇上的問題進(jìn)行記錄一下。
背景:平時(shí)網(wǎng)絡(luò)好的時(shí)候,我開啟線程的上傳和下載都沒問題,網(wǎng)絡(luò)慢的時(shí)候就出來這個(gè)異常 Recv failure: Connection reset by peer 。
異常的原因有兩點(diǎn):1、網(wǎng)絡(luò)非常慢時(shí)易導(dǎo)致該異常;2、線程多次重復(fù)請求網(wǎng)絡(luò)服務(wù)造成的異常,因?yàn)樯洗螁⒂玫木€程還沒斷開,所以該服務(wù)一直存在,導(dǎo)致再次進(jìn)行上傳請求時(shí)異常。
開始寫的線程是這樣寫的:
new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { File file = new File(filePath); uploadForm(param, fileKey, file, file.getName(), RequestURL, mContext); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); |
這種寫法是相當(dāng)方便,當(dāng)請求結(jié)束后會(huì)自動(dòng)回收線程,但是如果請求一直沒有反應(yīng),這個(gè)線程將一直存在,所以當(dāng)我們點(diǎn)擊第二次上傳請求服務(wù)的時(shí)候,依然會(huì)報(bào)異常,因?yàn)樵摼€程一直暫用了這個(gè)“道”,其他的請求就無路可請,所以更改為:
if (mThread != null) { mThread.interrupt(); mThread = null; } mThread = new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { File file = new File(filePath); uploadForm(param, fileKey, file, file.getName(), RequestURL, mContext); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); mThread.start(); |
更改后,上傳異常解決了!
更改后的代碼中,我們對每次的線程請求進(jìn)行了判斷,保證了每次請求的獨(dú)立性,在上一個(gè)項(xiàng)目中也同樣遇上這個(gè)問題,當(dāng)時(shí)更改成socket進(jìn)行傳輸就Ok,問題的解決方案是多樣性的,希望遇上同樣問題的你能有所幫助!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。