2014-03-12 37 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();