Retrofit/OkHttp 响应崩溃

Retrofit/OkHttp crashes on response

我最近开始遇到 Retrofit/OkHttp 的问题。每当应用程序执行请求时,它都会因错误而崩溃:

05-18 12:13:51.908 E/AndroidRuntime: FATAL EXCEPTION: OkHttp Dispatcher
                                     Process: <<APP PACKAGE NAME>>, PID: 10264
                                     java.lang.reflect.UndeclaredThrowableException
                                         at $Proxy0.intercept(Unknown Source)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185)
                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135)
                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
                                         at java.lang.Thread.run(Thread.java:761)
                                      Caused by: java.lang.reflect.InvocationTargetException
                                         at java.lang.reflect.Method.invoke(Native Method)
                                         at com.android.tools.profiler.support.network.OkHttpInterceptorHandler.trackResponseBody(OkHttpInterceptorHandler.java:58)
                                         at com.android.tools.profiler.support.network.OkHttpInterceptorHandler.invoke(OkHttpInterceptorHandler.java:39)
                                         at java.lang.reflect.Proxy.invoke(Proxy.java:813)
                                         at $Proxy0.intercept(Unknown Source) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) 
                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135) 
                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                         at java.lang.Thread.run(Thread.java:761) 
                                      Caused by: java.lang.IllegalArgumentException: byteCount < 0: -1
                                         at okio.RealBufferedSource.request(RealBufferedSource.java:64)
                                         at java.lang.reflect.Method.invoke(Native Method) 
                                         at com.android.tools.profiler.support.network.OkHttpInterceptorHandler.trackResponseBody(OkHttpInterceptorHandler.java:58) 
                                         at com.android.tools.profiler.support.network.OkHttpInterceptorHandler.invoke(OkHttpInterceptorHandler.java:39) 
                                         at java.lang.reflect.Proxy.invoke(Proxy.java:813) 
                                         at $Proxy0.intercept(Unknown Source) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) 
                                         at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) 
                                         at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:185) 
                                         at okhttp3.RealCall$AsyncCall.execute(RealCall.java:135) 
                                         at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32) 
                                         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
                                         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
                                         at java.lang.Thread.run(Thread.java:761) 

我不知道为什么要这样做。服务器returns 200,返回的正文包含一个有效的JSON。更奇怪的是,代码中没有任何变化表明我可能引入了错误或类似的东西。它工作正常,突然间应用程序发出的所有请求都崩溃了。

有人知道为什么会这样吗?

可能值得一提的是,在我将请求发送到服务器之前,我在拦截器中对主体进行了加密。但我不认为这是服务器 returns 正确响应的问题。

谢谢:)

下面的 class 名称在您的堆栈跟踪中。我猜这是 Android 工作室的新 OkHttp 分析器中的一个错误。您应该向他们报告错误;他们会及时修复。

com.android.tools.profiler.support.network.OkHttpInterceptorHandler.