致命 - 接口未实现 - OkHttp3 - Android

Fatal - Interface not implemented - OkHttp3 - Android

我正在请求 JSON 带有 OkHttp3、RetroFit 2.0 + RxObservable 的文件,它抛出接口未实现。这似乎只发生在 Android 4.3 用户,他们是 运行 我们应用程序的旧版本并升级到最新的应用程序版本。

01-19 16:43:31.089 1611-1692/? E/AndroidRuntime: FATAL EXCEPTION: IntentService[MyDataIntentService]
                                     java.lang.IncompatibleClassChangeError: interface not implemented
                                         at okhttp3.internal.Util.closeQuietly(Util.java:100)
                                         at okhttp3.internal.connection.StreamAllocation.streamFailed(StreamAllocation.java:332)
                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.recover(RetryAndFollowUpInterceptor.java:209)
                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:132)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                         at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:212)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:179)
                                         at okhttp3.RealCall.execute(RealCall.java:63)
                                         at retrofit2.OkHttpCall.execute(OkHttpCall.java:174)
                                         at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:144)
                                         at retrofit2.adapter.rxjava.RxJavaCallAdapterFactory$CallOnSubscribe.call(RxJavaCallAdapterFactory.java:125)
                                         at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
                                         at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
                                         at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:50)
                                         at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
                                         at rx.Observable.subscribe(Observable.java:8759)
                                         at rx.Observable.subscribe(Observable.java:8726)
                                         at rx.Observable.subscribe(Observable.java:8581)
                                         at com.somepackage.someclass.loadSomeJSONThing(MyFile.kt:61)

呼叫如下:

//get returns Observable<Any>
myApi.getSomeObj("some_id")
     .subscribe({ responseHandler(it) },
                { Crashlytics.logException(it) })

我认为这是 OkHttp 回归。我们错误地假设 Socket 实现了 Closeable,旧设备并非如此。很快就会修复。

已修复:https://github.com/square/okhttp/pull/3125