Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.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
Android 第2部分:如何从响应中保存cookie_Android_Cookies_Kotlin_Retrofit2_Okhttp - Fatal编程技术网

Android 第2部分:如何从响应中保存cookie

Android 第2部分:如何从响应中保存cookie,android,cookies,kotlin,retrofit2,okhttp,Android,Cookies,Kotlin,Retrofit2,Okhttp,我需要从cookie中添加一些授权信息以响应下一个请求 它在邮递员中工作——我发出授权请求,然后是第二个请求,这很好。但若我删除cookies,第二个请求返回错误,我必须再次执行授权请求 但在我的应用程序中,第二个请求总是返回相同的错误。我试图使用拦截器找到所需的cookie,但没有找到 val client = OkHttpClient.Builder() .addInterceptor(OAuthInterceptor()) private class OAuthIntercept

我需要从cookie中添加一些授权信息以响应下一个请求

它在邮递员中工作——我发出授权请求,然后是第二个请求,这很好。但若我删除cookies,第二个请求返回错误,我必须再次执行授权请求

但在我的应用程序中,第二个请求总是返回相同的错误。我试图使用拦截器找到所需的cookie,但没有找到

val client = OkHttpClient.Builder()
    .addInterceptor(OAuthInterceptor())

private class OAuthInterceptor : Interceptor {
    override fun intercept(chain: Chain): Response {
        val request = chain.request()
        com.app.logic.toLog("${chain.proceed(request).header("set-cookie")} ") // it's not that cookie what I looking for
        val headers = chain.proceed(request).headers()
        headers.names().forEach {
            val s = headers.get(it)
            com.app.logic.toLog("$it -> $s")
        }
        return chain + (Session.authConsumer?.let { consumer ->
            consumer.sign(request).unwrap() as Request
        } ?: request)
    }
}

有人知道我还可以尝试什么吗?

您可以使用此功能了解如何在收到cookie时拦截cookie并将其发送回您的请求标题中。

因此,我终于找到了处理cookie的解决方案

val client = OkHttpClient.Builder()
    .cookieJar(UvCookieJar())

private class UvCookieJar : CookieJar {

    private val cookies = mutableListOf<Cookie>()

    override fun saveFromResponse(url: HttpUrl, cookieList: List<Cookie>) {
        cookies.clear()
        cookies.addAll(cookieList)
    }

    override fun loadForRequest(url: HttpUrl): List<Cookie> =
        cookies
}
val client=OkHttpClient.Builder()
.cookieJar(UvCookieJar())
私有类UvCookieJar:CookieJar{
private val cookies=mutableListOf()
覆盖趣味saveFromResponse(url:HttpUrl,cookieList:List){
cookies.clear()
cookies.addAll(cookieList)
}
覆盖fun loadForRequest(url:HttpUrl):列表=
饼干
}

谢谢,我想这会有帮助。但是在这个解决方案中,我需要
上下文
,并且需要使用共享首选项。我已经找到了更简单的方法来解决这个问题。你可以随时使用应用程序上下文。是的,我可以。但我更愿意避免使用上下文和prefs来实现这一点。正如我所说的,没有它们还有另一种方法谢谢!这正是我要找的。