EOFException在执行同步PUT请求时进行改造

在我的应用程序中,我使用Retrofit库进行同步 PUT请求。 问题是:有时库会抛出EOFExceptionexception。

以下是这种情况下的堆栈跟踪

 29099-29269/com.mycompany.myapp D/Retrofit﹕ java.io.EOFException at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:192) at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189) at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240) at $Proxy7.addEvents(Native Method) at com.mycompany.myapp.api.MyService.addEvents(MyService.java:59) 

我尝试了以下提出的解决scheme,但没有一个在我的情况帮助:

  • 改造仅在第一次给出EOFException
  • bug retrofit.RetrofitError:Android的java.io.EOFException
  • 1.4.0 String中的新行导致retrofit.RetrofitError:java.io.EOFException

这里是我如何在我的应用程序中创buildRestAdapter

 OkHttpClient okHttpClient = new OkHttpClient(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Url) .setRequestInterceptor(new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader("Accept", "application/json"); request.addHeader("Content-Type", "application/json"); } }) .setClient(new OkClient(okHttpClient)) .setLogLevel(RestAdapter.LogLevel.FULL) .setErrorHandler(new MyErrorHandler()) .build(); 

有没有人知道这个问题的其他解决scheme?

顺便说一句,我不能使用涉及System.setProperty("http.keepAlive", "false");解决schemeSystem.setProperty("http.keepAlive", "false"); 因为性能方面的原因,我需要保持连接正常。

Solutions Collecting From Web of "EOFException在执行同步PUT请求时进行改造"

也许EOF丢失networking连接或超时。 尝试增加您的超时时间,并确保保持活着设置。

你可以用类似的问题来看这个答案 。

如果你有很大的要求(我认为这是超过50Mb的数据),而你没有在服务器端使用分页系统,你可以得到这种types的错误。

例如,它也可以是服务器端的TimeOut。

这个问题通常可能是由networking错误引起的。 如果一致地再现,请考虑内容长度和请求超时的可能原因。 有时超时networking请求可能会返回不正确的文件结束。 这会导致这个错误。