之前在博客里推薦使用OkHttp來替換HttpClient、HttpUrlConnection,項目上線以后發現打臉了。
打臉歸打臉,錯誤還得及時糾正。
問題
最近項目引入OkHttp上線以后,收到用戶反饋說軟件無法獲取服務器信息。
感謝用戶的配合,讓我找到了OkHttp這個隱藏比較深的bug。
提醒
OkHttp2.0有Bug,現在還不適宜引入項目代替HttpClient、HttpUrlConnection
Bug描述
首先需要聲明,不是所有設備都能重現,僅少量設備會出現這個問題。(如果問題這么明顯,OkHttp早就修復了)
設備
酷派大神F1, 刷了MIUI
項目中使用的OkHttp庫
OkHttp2.0 Okio1.0
Log崩潰信息如下
10-29 17:18:30.036: W/System.err(20871): java.io.EOFException
10-29 17:18:30.040: W/System.err(20871): at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:154)
10-29 17:18:30.041: W/System.err(20871): at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189)
10-29 17:18:30.044: W/System.err(20871): at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
10-29 17:18:30.045: W/System.err(20871): at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676)
10-29 17:18:30.046: W/System.err(20871): at com.squareup.okhttp.Call.getResponse(Call.java:205)
10-29 17:18:30.047: W/System.err(20871): at com.squareup.okhttp.Call.execute(Call.java:80)
10-29 17:18:30.048: W/System.err(20871): at com.czt.okhttpdemo.MainActivity$1.run(MainActivity.java:34)
查到Github issue里顯示,有些用戶在2.0正式版之前是沒有問題的,但是2.0時候確實存在這個bug,而且一直也沒有修復。
官方答復
出現這個bug后,我也反饋給了OkHttp,他們現在標記在2.3版本里面解決。
Github issue鏈接
Update=======
Issues-1518顯示似乎已經修復,產品使用OkHttp2.5后不少用戶反映已經可以使用