使用 kotlin 进行改造 throws Failed to connect to {ServerName/IpAddress}
Retrofit with kotlin throws Failed to connect to {ServerName/IpAddress}
我在使用 retrofit2 和 kotlin 时遇到奇怪的问题。我是科特林的新手。
当我点击 API 超过 6 次时,出现 Failed to connect to {ServerName/IpAddress} 错误。
这是接口的代码
companion object {
lateinit var context: Context
private fun getHttpClient(): OkHttpClient.Builder {
return OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.addInterceptor(HttpLoggingInterceptor().apply {
level = if(BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
})
}
fun retrofitBuilder(): Retrofit.Builder {
val gson = GsonBuilder().setLenient().create()
return Retrofit.Builder()
.baseUrl(AppConstants.BASE_URL)
//.addConverterFactory(ToStringConverterFactory())
.addConverterFactory(GsonConverterFactory.create(gson))
}
fun create(): ApiInterface {
val gson = GsonBuilder().setLenient().create()
val retrofit = retrofit2.Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(AppConstants.BASE_URL)
.client(getHttpClient().build())
.build()
return retrofit.create(ApiInterface::class.java)
}
fun createWithAuth(context: Context, token: String?): ApiInterface {
this.context = context
val httpClient = getHttpClient()
httpClient.addInterceptor { chain ->
val req = chain.request()
val request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer $token")
.addHeader("Accept-Encoding", "None")
.method(req.method, req.body)
.build()
chain.proceed(request)
}
val retrofits = retrofitBuilder().client(httpClient.build()).build()
return retrofits.create(ApiInterface::class.java)
}
}
我检查了服务器是否有问题,但是我通过使用 Runner 循环点击相同的 API 100 次来检查 Postman。 Postman returns 每次都成功响应。
请帮助我。
谢谢。
在上面的问题中,伴随对象{} 中的代码是在我的端点所在的接口 class 中编写的。
并创建了这个 class 类似于上面的代码,但作为一个单独的 class。
class ApiClient private constructor() {
companion object {
private val retrofit: Retrofit? = null
private var context: Context? = null
private val httpClient: OkHttpClient.Builder = OkHttpClient.Builder()
//.addInterceptor(LoggingInterceptor())
private val builder: Retrofit.Builder = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
fun createService(ctx: Context): ApiInterface {
context = ctx
val retrofit: Retrofit = builder.client(httpClient.build()).build()
return retrofit.create(ApiInterface::class.java)
}
fun createServiceWithAuth(ctx: Context, authToken: String?): ApiInterface {
context = ctx
if (authToken != null) {
httpClient.addInterceptor(object : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val original: Request = chain.request()
val request: Request = original.newBuilder() //.header("User-Agent", "Your-App-Name")
.header("Authorization", "bearer $authToken")
.header("Accept-Encoding", "None")
.method(original.method, original.body)
.build()return chain.proceed(request)
}
})
}
val retrofit: Retrofit = builder.client(httpClient.build()).build()
return retrofit.create(ApiInterface::class.java)
}
}
}
我仍然不明白这两个代码中的问题是什么{Question asked, and this answer}。但是这个答案并没有给我这样的问题。
如果有人能向我解释这对我和其他人都有帮助。
谢谢
我在使用 retrofit2 和 kotlin 时遇到奇怪的问题。我是科特林的新手。 当我点击 API 超过 6 次时,出现 Failed to connect to {ServerName/IpAddress} 错误。
这是接口的代码
companion object {
lateinit var context: Context
private fun getHttpClient(): OkHttpClient.Builder {
return OkHttpClient.Builder()
.readTimeout(60, TimeUnit.SECONDS)
.connectTimeout(60, TimeUnit.SECONDS)
.addInterceptor(HttpLoggingInterceptor().apply {
level = if(BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE
})
}
fun retrofitBuilder(): Retrofit.Builder {
val gson = GsonBuilder().setLenient().create()
return Retrofit.Builder()
.baseUrl(AppConstants.BASE_URL)
//.addConverterFactory(ToStringConverterFactory())
.addConverterFactory(GsonConverterFactory.create(gson))
}
fun create(): ApiInterface {
val gson = GsonBuilder().setLenient().create()
val retrofit = retrofit2.Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.baseUrl(AppConstants.BASE_URL)
.client(getHttpClient().build())
.build()
return retrofit.create(ApiInterface::class.java)
}
fun createWithAuth(context: Context, token: String?): ApiInterface {
this.context = context
val httpClient = getHttpClient()
httpClient.addInterceptor { chain ->
val req = chain.request()
val request = chain.request().newBuilder()
.addHeader("Authorization", "Bearer $token")
.addHeader("Accept-Encoding", "None")
.method(req.method, req.body)
.build()
chain.proceed(request)
}
val retrofits = retrofitBuilder().client(httpClient.build()).build()
return retrofits.create(ApiInterface::class.java)
}
}
我检查了服务器是否有问题,但是我通过使用 Runner 循环点击相同的 API 100 次来检查 Postman。 Postman returns 每次都成功响应。
请帮助我。
谢谢。
在上面的问题中,伴随对象{} 中的代码是在我的端点所在的接口 class 中编写的。
并创建了这个 class 类似于上面的代码,但作为一个单独的 class。
class ApiClient private constructor() {
companion object {
private val retrofit: Retrofit? = null
private var context: Context? = null
private val httpClient: OkHttpClient.Builder = OkHttpClient.Builder()
//.addInterceptor(LoggingInterceptor())
private val builder: Retrofit.Builder = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
fun createService(ctx: Context): ApiInterface {
context = ctx
val retrofit: Retrofit = builder.client(httpClient.build()).build()
return retrofit.create(ApiInterface::class.java)
}
fun createServiceWithAuth(ctx: Context, authToken: String?): ApiInterface {
context = ctx
if (authToken != null) {
httpClient.addInterceptor(object : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val original: Request = chain.request()
val request: Request = original.newBuilder() //.header("User-Agent", "Your-App-Name")
.header("Authorization", "bearer $authToken")
.header("Accept-Encoding", "None")
.method(original.method, original.body)
.build()return chain.proceed(request)
}
})
}
val retrofit: Retrofit = builder.client(httpClient.build()).build()
return retrofit.create(ApiInterface::class.java)
}
}
}
我仍然不明白这两个代码中的问题是什么{Question asked, and this answer}。但是这个答案并没有给我这样的问题。
如果有人能向我解释这对我和其他人都有帮助。
谢谢