Android OkHttp Retrofit RxJava集成的常见Bug

852 阅读1分钟

在使用 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
    }  
```

这样就可以解决了。
上面这两个问题不太容易定位,贴出来希望可以有帮助,总之,还是要细心。