27

在我的应用程序中,我使用 Retrofit 库发出同步请求。 PUT问题是:有时图书馆会抛出EOFExceptions。

下面是其中一种情况的堆栈跟踪

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)

我尝试了以下提议的解决方案,但在我的情况下它们都没有帮助:

这是我RestAdapter在我的应用程序中创建的方式:

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();

有谁知道该问题的其他解决方案?

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

4

3 回答 3

2

此问题通常是由网络错误引起的。如果它始终如一地再现,请考虑内容长度和请求超时的潜在原因。有时超时的网络请求可能会返回不正确的文件结尾。结果会引发此错误。

于 2017-11-05T03:23:33.613 回答
0

也许 EOF 为丢失的网络连接或超时。尝试增加超时时间并确保设置了保持活动状态。

于 2015-03-10T18:04:21.643 回答
0

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

如果您有大请求(我认为这是超过 50Mb 的数据)并且您没有在服务器端使用分页系统,您可能会收到此类错误。

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

于 2016-06-14T16:59:39.663 回答