OkHttpInterceptor从Kotlin拦截器导航到登录片段

吐司布鲁尔

我在这里有点挣扎。

我试图实现的是,如果发生401,则从Httpinterceptor导航回到登录片段。

我正在使用Jwt进行授权,如果令牌不再有效,则会从后端返回未经授权的401。

我曾尝试使用Google搜索该问题,但最终没有得到解决我问题的真正答案。

到目前为止,我一直在尝试通过NavHostFragment.findNavController和findNavController(MainActivity.activity,1)获取navcontroller。

两种方法都不起作用,因为第一种方法要求您提供一个我在拦截器中没有的片段,而第二种方法则失败了,因为我无法找到一种从拦截器访问MainActivity的方法。

没有太多代码,但这就是拦截器现在的样子(由于明显的原因而无法正常工作)

package de.wabi.vistascraper.library.http.interceptors

import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import de.wabi.vistascraper.MainActivity
import de.wabi.vistascraper.ui.main.MainFragment
import okhttp3.Interceptor
import okhttp3.Response

class ErrorInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        var builder = chain.request().newBuilder()

        var response = chain.proceed(builder.build())

        var test = NavHostFragment.findNavController(this.);

        if(response.code == 401){
           // var test = findNavController(MainActivity.activity, 1)

        }
        return response;
    }
}

也许您对互联网上的人们有个好主意。

提前致谢

大卫

谢尔盖

您可以执行以下操作来绑定拦截器和活动:

class ErrorInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
        var builder = chain.request().newBuilder()

        var response = chain.proceed(builder.build())

        if (response.code == 401) {
            GlobalNavigator.logout()
        }

        return response
    }
}

object GlobalNavigator {

    private var handler: GlobalNavigationHandler? = null

    fun registerHandler(handler: GlobalNavigationHandler) {
        this.handler = handler
    }

    fun unregisterHandler() {
        handler = null
    }

    fun logout() {
        handler?.logout()
    }
}

interface GlobalNavigationHandler {
    fun logout()
}

class YourActivity : GlobalNavigationHandler {
    override fun logout() {
        findNavController().navigate(R.id.loginFragment)
    }

    override fun onStart() {
        GlobalNavigator.registerHandler(this)
    }

    override fun onStop() {
        GlobalNavigator.unregisterHandler()
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将数据从EJB拦截器传递到异步EJB中的拦截器

来自分类Dev

将$ route注入到HTTP拦截器中

来自分类Dev

匹配 Apache HttpClient 响应拦截器到请求

来自分类Dev

万一拦截器发生错误,如何将控件从拦截器重定向到jsp

来自分类Dev

EJB拦截器与CDI拦截器

来自分类Dev

Java拦截器不拦截

来自分类Dev

Infinispan拦截器配置?

来自分类Dev

AngularJS HTTP拦截器

来自分类Dev

温莎城堡拦截器

来自分类Dev

不能推拦截器

来自分类Dev

卫星Http拦截器

来自分类Dev

温莎城堡拦截器

来自分类Dev

飞镖Grpc的拦截器

来自分类Dev

AngularJS HTTP拦截器

来自分类Dev

Angular JS拦截器

来自分类Dev

USB通讯拦截器

来自分类Dev

卫星Http拦截器

来自分类Dev

春季拦截器的使用

来自分类Dev

NHibernate拦截器-OnFlushDirty

来自分类Dev

NewRelic 的 Okhttp 拦截器?

来自分类Dev

在CXF中使用log4j登录和注销拦截器消息

来自分类Dev

在Spring Security中使用不同的名称空间为多个表单登录设置拦截器

来自分类Dev

GRPC Java将数据从服务器拦截器传递到rpc服务调用

来自分类Dev

将信息从拦截器传递到控制器方法

来自分类Dev

如何获取从拦截器传递到自定义验证器的数据?

来自分类Dev

拦截器vs装饰器

来自分类Dev

处理Kotlin Coroutines中的自定义okhttp拦截器引发的异常

来自分类Dev

将HttpContext.Current.Session注入到拦截器中或在拦截器内部使用时(MVC4 WebAPI)为null

来自分类Dev

如何将springbean注入到struts拦截器中