2014-03-12 64 views
7

我在我的Android項目中第一次使用框架翻新。 它處理與後端的通信。現在最奇怪的部分是在Android 4.4上,一切都像魅力一樣。在下面的每個版本。我得到一個RetrofitError類型的java.io.EOFException。所以它第一次失敗,然後當我按下重試按鈕時它就起作用了。那麼爲什麼第一次失敗呢?Retrofit僅在第一次給出EOFException

我想解決這個問題,因爲它是煩人,用戶需要點擊重試...

是否有人得到了一個解決方案?

+0

是否有任何答案適合您? – AabidMulani

+0

兩者都在下面。 OkHttp是我的解決方案,解決了這個問題。 – user1007522

+0

這裏同樣的問題。看看在'GitHub'上創建的[這張票](https://github.com/square/retrofit/issues/397)。 – theblang

回答

4

我找到了解決方案。在Android 4.4中,它們與OkHttpclient一起工作,這就是爲什麼它在4.4而不是在較舊的Android版本上工作的原因。

爲了解決這個添加依賴於gradle這個:

compile 'com.squareup.okhttp:okhttp-tests:1.5.1' 

,並創建一個新的客戶端是這樣的:

OkHttpClient client = new OkHttpClient(); 

添加新的客戶端向restadapter使用此:

setClient(new OkClient(client)) 

現在應該解決錯誤。

+3

我剛剛做了'.setClient(new OkClient())',但是好的,OkHttp解決了這個問題,並且大大加快了我的HTTP請求速度。另外,你可以接受你自己的答案。 – theblang

+0

我想你應該參考'compile'c​​om.squareup.okhttp:okhttp:x.y.z''而不是'compile'c​​om.squareup.okhttp:okhttp-tests:x.y.z'。 – JJD

+0

我仍然得到相同的錯誤,所以它似乎沒有解決這個問題在果凍豆上。 – Ewald

0

這個錯誤似乎是因爲之前的連接重用而發生的。您可以禁用Keepalive以避免它:

System.setProperty("http.keepAlive", "false"); 
0

我終於解決了這個問題。解決方案是使用OkClient和OkHttp。在添加這兩個庫後,我將客戶端設置爲Oktrttit

RestAdapter restAdapter = new RestAdapter.Builder() 
.setErrorHandler(new ErrorRetrofitHandlerException()) 
.setEndpoint("Yout base URL") 
.setLogLevel(RestAdapter.LogLevel.FULL) 
.setClient(new OkClient(new OkHttpClient())) //Http Client 
.build();