android - 如何在 Kotlin android 改造中使用 enque 方法

标签 android kotlin retrofit2 rx-java2 rx-android

我正在尝试使用改造和 kotlin 语言从网络服务获得响应。但我无法调用enque 方法。

这是 retrofit 客户端

    class WebService() {

    companion object {
        fun createService(isAddToken: Boolean): WebServiceApi {
            val logging = HttpLoggingInterceptor()
            val httpClient = OkHttpClient.Builder()
            var retrofit: Retrofit

            httpClient.addInterceptor { chain ->
                val original = chain.request()
                val requestBuilder = original.newBuilder()
                        .header(CONTENT_TYPE, "application/json")
                        .header(API_USER_NAME, AUTH_USERNAME)
                        .header(API_PASSWORD, AUTH_PASSWORD)
                        .header(LANGUAGE_CODE, "en")
                if (isAddToken) {
                    requestBuilder.header(TOKEN,
                            "" /*DataGenerator.getAuthToken(context)*/)
                }

                requestBuilder.method(original.method(), original.body())
                val request = requestBuilder.build()
                chain.proceed(request)
            }

            // set your desired log level
            if (BuildConfig.DEBUG) {
                logging.level = HttpLoggingInterceptor.Level.BODY
                // add logging as last interceptor
                httpClient.addInterceptor(logging)
            }

            // Timeout handling
            val client = httpClient.readTimeout(20,
                    TimeUnit.SECONDS)
                    .connectTimeout(20, TimeUnit.SECONDS)
                    .writeTimeout(20, TimeUnit.SECONDS)
                    .build()

            if (BuildConfig.DEBUG) {
                retrofit = Retrofit.Builder()
                        .baseUrl(WebServiceConstants.LIVE_BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(client)
                        .build()
            } else {
                retrofit = Retrofit.Builder()
                        .baseUrl(WebServiceConstants.LIVE_BASE_URL)
                        .addConverterFactory(GsonConverterFactory.create())
                        .client(client)
                        .build()

            }

            return retrofit.create(WebServiceApi::class.java);
        }
    }
}

这是我在按钮上调用 api 的 MainActivity 代码

 val parameterOTP = SendParameterOTP()
 parameterOTP.phoneNumber = phoneNumber

 var serviceAPI = WebService.createService(false)
 serviceAPI.enque() \\Unable to understand how i call enques**

我尝试使用 rxjava 的示例,它工作正常。但是我想使用 enque 方法,因为我想实现自定义回调以重试。请帮忙

最佳答案

尝试使用这个:

val call = createService(isAddToken).methodNameInWebServiceApi(params)
            call.enqueue(object : Callback<ResponseObject> {
                override fun onFailure(call: Call<ResponseObject>?, t: Throwable?) {
                    Log.e("erroe", "")
                }

                override fun onResponse(call: Call<ResponseObject>?, response: Response<ResponseObject>?) {

                }
            })

关于android - 如何在 Kotlin android 改造中使用 enque 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49573168/

相关文章:

android - 失败时如何获取retrofit request的body?

android - 尝试通过 wifi 从 android 连接到桌面服务器时出现问题

java - 如何从变量类型 Uri 获取绝对路径

android - 我从不进入我的 ViewModel 中的 LiveDataScope

kotlin - 从 kotlin/native 框架调用 swift 中的类

android - 如何使用 Retrofit2 发出查询数组请求?

java - SimpleDateFormat 返回 24 小时日期 : how to get 12-hour date?

java - 构建 RecyclerView 时创建的自动生成文件出错

java - 在 build.gradle 中找不到参数的方法类路径()

android - 使用改造将位图映射到 MultiPartEntity