【问题标题】:java.lang.NoSuchMethodError in OkHttpClient.Builder() after updating from retrofit 2.6.2 to retrofit 2.9.0从改造 2.6.2 更新到改造 2.9.0 后 OkHttpClient.Builder() 中的 java.lang.NoSuchMethodError
【发布时间】:2020-09-25 11:15:58
【问题描述】:

之前我在我的项目中使用 retrofit version 2.6.2 来调用 api 服务,一切正常。我正在创建一个自定义 Interceptor 以将 api key 添加到每个请求的标头中。

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后,我在OkHttpClient.Builder() 行中得到java.lang.NoSuchMethodError,同时将Interceptor 添加到@ 987654329@.

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 版本是多少?
  • @SaurabhThorat 我没有使用 OkHttp 的特定依赖项,我使用的是改造附带的默认版本。

标签: android android-studio kotlin retrofit2 okhttp


【解决方案1】:

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

android {
...

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • OkHttp最新版本为4.7.2
    • @SaurabhThorat 重建项目也无济于事。
    • @SaurabhThorat 3.14.* 基于 Java,4.x 基于 Kotlin
    猜你喜欢
    • 2016-11-30
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多