AuthInterceptor в Retrofit, отправка запроса два раза - PullRequest
0 голосов
/ 19 марта 2020

Я создал AuthInterceptor, в котором я проверяю, получаю ли я AUTH_ERROR, тогда мне нужно сгенерировать новый токен и добавить его для запроса заголовка, ниже мой код

            val tempSessionId = getStoredToken(

            request = request.newBuilder()
                    .addHeader("Authorization", "Bearer $tempSessionId").build()


            val response = chain.proceed(request)

            try {
                if (response.isSuccessful) {
                    val body = response.body!!.string() <- Here response will be closed
                    if (body.contains("status")) {
                        val jsonObject = JSONObject(body)
                        val status = jsonObject.optInt("status")
                        if (status != null && status == 0) {
                            val errorCode = jsonObject.getJSONObject("data").optString("error_code")
                            if (errorCode != null) {
                                addRefreshTokenToRequest(request) <- Generating new token
                                return chain.proceed(request) 
                            }
                        }
                    }
                }
            } catch (e: Exception) {
                e.printStackTrace()
            }
            return chain.proceed(request) <-How to prevent new request again
        }

Если в последнем коде, если Я не вызываю chain.proceed (request) и верну прямой ответ, тогда я получу ошибку InavalidStatus: Close , потому что response.body !!. String () будет закрытие ответа.

Как прочитать ответ без закрытия ответа. Поэтому мне не нужно снова вызывать chain.proceed (запрос) .

...