在使用 OkHttp Retrofit RxAndroid 的过程中遇到了一些莫名的 Bug。如下:
ArrayIndexOutOfBoundsException
> Throwing new exception ‘length=6; index=7’ with unexpected pending exception:java.lang.ArrayIndexOutOfBoundsException: length=6; index=6
解决办法:这个网上不少都是说取消勾选 Instant Run,就每次运行都重新编译。但是这个功能在 Android Studio3.5 版本后废弃了。
我试了下这样并不能解决问题,然后发现是因为 Retrofit、RxAndroid 和 adapter-rxjava 的版本不匹配引起的。RxAndroid 是 3.0,原来的 adapter-rxjava 使用的版本是 2。
更改后的依赖是这样的
```
// okHttp 3.14
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
// Retrofit 2.9
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
// Convert Google Json(Convert the result to Model)
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
// Retrofit CallAdapter convert to RxJava
implementation 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
// RxAndroid 3.0
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
```
BootstrapMethodError
> java.lang.BootstrapMethodError: Exception from call site #1 bootstrap method…
解决办法:这个是因为 Retrofit 中使用了 JDK8 中的新特性,Lamdba 等,所以我们要在 app 的 build.gradle 中添加支持。
```
// Support new features of JDK1.8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
```
这样就可以解决了。
上面这两个问题不太容易定位,贴出来希望可以有帮助,总之,还是要细心。