Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在android中调用实现验证器的类_Java_Android - Fatal编程技术网

Java 如何在android中调用实现验证器的类

Java 如何在android中调用实现验证器的类,java,android,Java,Android,我已经创建了一个子类,它是从Authenticator类扩展而来的。我正在从该验证器类中的AsyncTask调用doInBackground方法。代码如下 TokenAuthenticator.java 未调用此类(未打印日志)。这里的AWSInitiator是一个类,它扩展了AsyncTask我使用的是下面的类,它包含验证器和拦截器。如果只需要验证器代码,则可以删除拦截器代码 注意:-我在下面的代码中与GSON一起使用改装 class SupportInterceptor(contex

我已经创建了一个子类,它是从
Authenticator
类扩展而来的。我正在从该验证器类中的
AsyncTask
调用
doInBackground
方法。代码如下

TokenAuthenticator.java
未调用此类(未打印日志)。这里的
AWSInitiator
是一个类,它扩展了AsyncTask

我使用的是下面的类,它包含验证器和拦截器。如果只需要验证器代码,则可以删除拦截器代码

注意:-我在下面的代码中与GSON一起使用改装

    class SupportInterceptor(context: Context) : Interceptor, Authenticator {
    var ctx: Context = context
    var prefManager: PrefManager

    init {
        prefManager = PrefManager.getInstance(ctx)
    }

    /**
     * Interceptor class for setting of the headers for every request
     */
    override fun intercept(chain: Interceptor.Chain): Response {

        var request = chain.request()
        request =
            request.newBuilder().addHeader("Content-Type", "application/json")
                .addHeader("Accept", "application/json")
                .addHeader(
                    "Authorization",
                    "Bearer " + prefManager.getString(PreferenceConstants.ACCESS_TOKEN)
                )
                .build()
        return chain.proceed(request)

    }

    /**
     * Authenticator for when the authToken need to be refresh and updated
     * everytime we get a 401 error code
     */
    @Throws(IOException::class)
    override fun authenticate(route: Route?, response: Response): Request? {
        if (response.code == 401) {
            val client = OkHttpClient()
            val jsonObject = JSONObject()
            val dataObject = JSONObject()
            dataObject.accumulate("userCode", prefManager.getString(PreferenceConstants.USER_ID))
            dataObject.accumulate("password", prefManager.getString(PreferenceConstants.PASSWORD))
            jsonObject.accumulate("Data", dataObject)
            val json = "application/json; charset=utf-8".toMediaTypeOrNull()
            val body = RequestBody.create(json, jsonObject.toString())
            val request = Request.Builder()
                .url(APIClient.COMPLETE_URL + "API ENDPOINTS")
                .post(body)
                .build()
            val res = client.newCall(request).execute()
            if (res.isSuccessful) {
                try {
                    val jsonObj = JSONObject(res.body?.string())
                    val accessToken = jsonObj.opt("accessToken")
                    val statusCode = jsonObj.opt("statusCode")
                    if (statusCode.toString().equals("-1") || accessToken == null || accessToken.toString().equals(
                            "null"
                        )
                    ) {
                        userLogout()
                        return null
                    } else {
                        prefManager.putString(
                            PreferenceConstants.ACCESS_TOKEN,
                            accessToken as String
                        )
                        return response.request.newBuilder()
                            .header("Authorization", "Bearer " + accessToken as String)
                            .build();
                    }
                } catch (e: Exception) {
                    return null
                }
            } else {
                return null
            }
        }
        return null
    }

    fun userLogout() {
        prefManager?.putBoolean(PreferenceConstants.IS_LOGGED_IN, false)
        val intent = Intent(ctx!!, LoginActivity::class.java)
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        ctx.startActivity(intent)
        ///ctx?.finishAffinity()
    }
}
这就是如何将其添加到http客户端的方法

httpClient.authenticator(supportInterceptor)

我对科特林不熟悉。你能给我提供一个类似的java版本吗?你的验证器java方法看起来不错,但似乎你还没有将它添加到你的http客户端
OkHttpClient.Builder client=new OkHttpClient.Builder();TokenAuthenticator TokenAuthenticator=新的TokenAuthenticator();客户端验证器(令牌验证器)
我这样做了,我认为您也需要为authenticator向workWill添加拦截器
.addHeader()
而不是
。header()
在我的TokenAuthenticator的返回语句中有任何意义
httpClient.authenticator(supportInterceptor)