从 retrofit 2.6.2 升级到 retrofit 2.9.0 后,OkHttpClient.Builder()中出现java.lang.NoSuchMethodError。

问题描述 投票:1回答:3

之前我使用的是 改装2.6.2版本 在我的项目中调用api服务,一切正常。我正在创建一个自定义的 Interceptor 添加 api key 到每个请求的头。

网络拦截器.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 一行 OkHttpClient.Builder() 在加上 InterceptorRetrofit.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)
        }
    }
}

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

android android-studio kotlin retrofit2 okhttp
3个回答
3
投票

在你的应用程序级别的android块中添加编译选项。build.gradle 文件。

android {
...

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.