java.lang.NoSuchMethodError in OkHttpClient.Builder() 从 retrofit 2.6.2 更新到 retrofit 2.9.0 后

java.lang.NoSuchMethodError in OkHttpClient.Builder() after updating from retrofit 2.6.2 to retrofit 2.9.0

早些时候我在我的项目中使用 retrofit 版本 2.6.2 来调用 api 服务并且一切正常。我正在创建自定义 Interceptor 以将 api key 添加到每个请求的 header。

NetworkInterceptor.kt

class NetworkInterceptor() : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {

        var request = chain.request()
            request = request.newBuilder()
                .addHeader("Authorization", "Client-ID ${NetworkConfig.CLIENT_ID}")
                .build()

        return chain.proceed(request)
    }
}

我将改装库更新到 2.9.0 版本,在更新到 改装版本 2.9.0 后,我在行 java.lang.NoSuchMethodError 中得到 java.lang.NoSuchMethodError =19=] 同时将 Interceptor 添加到 Retrofit.Builder().

Api.kt

interface Api {

    @GET("photos")
    suspend fun getPhotos(
        @Query("page") pageNumber: Int,
        @Query("per_page") pageSize: Int,
        @Query("order_by") orderBy: String
    ) : Response<List<Photo>>

    @GET("photos/random")
    suspend fun getRandomPhoto() : Response<Photo>

    companion object{
        operator fun invoke(
            networkInterceptor: NetworkInterceptor
        ) : Api{

            val client = OkHttpClient.Builder()    //java.lang.NoSuchMethodError
                .addInterceptor(networkInterceptor)
                .build()

            return Retrofit.Builder()
                .baseUrl(NetworkConfig.BASE_URL)
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
                .create(Api::class.java)
        }
    }
}

现在我不知道如何解决这个错误。任何帮助将不胜感激。

尝试重建您的项目。确保您的项目使用最新的 OkHttp 库 3.14.9.

在应用级别 build.gradle 文件的 android 块内添加编译选项:

android {
...

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}