在我的应用程序中,我使用Retrofit库进行同步 PUT
请求.问题是:有时候图书馆会抛出EOFException
s.
以下是其中一种情况的堆栈跟踪
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)
我尝试了以下展示的解决方案,但在我的案例中没有一个有用:
Retrofit仅在第一次提供EOFException
bug retrofit.RetrofitError:适用于Android的java.io.EOFException
1.4.0 String中的新行导致retrofit.RetrofitError:java.io.EOFException
以下是我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");
因为我需要保持我的连接活着,因为性能原因.