带有改造 api 请求的 ExceptionInInitializerError

ExceptionInInitializerError with retrofit api request

我在改造 api 请求时遇到了小问题,问题出现在我为请求设置配置的界面中,我只在 android 4.4,在更高版本上我没有收到这个错误,请提供一些帮助谢谢

 @GET("everything")
    suspend fun getNews(@Query("q") query: String, @Query("apiKey") apiKey : String
    ,@Query("page")page : Int) : AllNewsModel


    @GET("top-headlines")
    suspend fun getHeadlines(@Query("country")country : String, @Query("apikey")apiKey: String,
    @Query("page") page : Int) : HeadlinesModel


    companion object {
        var response : ApiResponse? = null
        fun News() : ApiResponse {
           response =  Retrofit.Builder()
                .baseUrl(Utils().BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build().create(ApiResponse::class.java)
            return response!!
        }

        fun Headlines() : ApiResponse {
            response =  Retrofit.Builder()
                .baseUrl(Utils().BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build().create(ApiResponse::class.java)
            return response!!
        }
    }

}
java.lang.ExceptionInInitializerError

Caused by: java.lang.IllegalStateException: Expected Android API level 21+ 
but  was 19 at okhttp3.internal.platform.AndroidPlatform.<clinit>

**编辑:在检查了有关此问题的一些主题后,我发现一个常见的答案是添加旧版本的 OkHttp 库,我这样做了,但它最终显示了另一个错误,这里是:

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x75038d5c:0x00000000)
     FATAL EXCEPTION: DefaultDispatcher-worker-2
Process: com.example.testingproject, PID: 10143
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x78ab22a8: Failure in SSL library, usually a protocol error
error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0x75038d5c:0x00000000)
 implementation("com.squareup.okhttp3:okhttp:3.12.0"){
        force = true 
    }

经过深入搜索,我发现这个解决方案对我有用 android 4.4 ( api 19 )

  val spec = ConnectionSpec.Builder(ConnectionSpec.COMPATIBLE_TLS)
                .tlsVersions(TlsVersion.TLS_1_2, TlsVersion.TLS_1_1, TlsVersion.TLS_1_0)
                .cipherSuites(
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
                .build()
            val okttp = OkHttpClient.Builder()
                .connectionSpecs(Collections.singletonList(spec))
           response =  Retrofit.Builder()
                .baseUrl(Utils().BASE_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .client(okttp.build())
                .build().create(ApiResponse::class.java)