OkHttp3的RequestBody执行两次writeTo()的问题

背景

某次用AS运行程序后,发现 OkHttp3 POST请求失败。
定位问题后发现,RequestBody 的 public void writeTo(@NonNull BufferedSink sink)方法被执行了2次,而数据源在第一次执行后就close()掉了,导致报IOException: unexpected end of stream on okhttp3错误。

原因

开启了AS的高级性能剖析,该功能会在 Android 7.1 及以下的版本增加 OkHttp3Interceptor 的类,就是这个类会再执行一次writeTo()方法。

OkHttp3Interceptor

解决

请按以下步骤操作:

  1. 依次选择 Run > Edit Configurations。
  2. 在左侧窗格中选择您的应用模块。
  3. 点击 Profiling 标签页,然后取消选中 Enable advanced profiling for older devices
  4. 再次构建并运行您的应用。

你可能感兴趣的:(OkHttp3的RequestBody执行两次writeTo()的问题)