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

3
我使用OkHttp3、Retrofit 2.0 + RxObservable请求一个JSON文件时,会抛出“接口未实现”的错误。这似乎只会在运行较旧版本我们应用的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) })
1个回答

2
我认为这是OkHttp的一个退步。我们错误地假定Socket实现了Closeable,而对于较旧的设备来说并非如此。很快就会解决。
已在此处修复:https://github.com/square/okhttp/pull/3125

对于API 16,我没有能力使用try-catch资源。 - Tim Nuwin
@TimNuwin 你可以不使用快照,或者等待下一次构建。 - Eric Cochran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接