编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

ARouter学习之路由拦截(路由器拦截http)

wxchong 2024-09-14 14:56:38 开源技术 8 ℃ 0 评论

不积硅步,无以至千里。不积小流,无以成江海。

今天我们来一起学习一下,如何使用ARouter的路由拦截功能实现判断用户是否登录。

随着软件功能不断地丰富,越来越多的软件开发都用上了组件化架构,既能将不同业务区分开来,也能复用其他业务模块。而不同组件之间的通信大多数采用了阿里的开源路由框架-ARouter,关于ARouter的配置,请查看我的上一篇文章《Android最好用的路由框架》

路由拦截:

相信很多软件开发者都会遇到下面类似这样的业务需求:

用户其实只是想做个发布操作,但是必须要登陆。通常的做法就是在用户跳转发布页面前进行登陆判断。基本上在每个需要登陆的操作前都需要进行登陆判断,这就会导致项目中到处都是登陆判断。同样的判断逻辑写了很多遍。怎么才能避免重复逻辑出现呢,其实ARouter早就给我们提供好了。

在我们使用ARouter路由跳转时,ARouter会在路由跳转过程中做了拦截处理只不过这个拦截需要我们自己去实现,一般只需要实现 IInterceptor和NavigationCallback两个接口。

//  name 可以自定义,priority优先级
@Interceptor(name = "login", priority = 8) 
class LoginInterceptorImpl :IInterceptor {
    override fun init(context: Context?) {
        Log.i("TAGss", "onInterrupt: init ")
    }

    override fun process(postcard: Postcard?, callback: InterceptorCallback?) {
        val path = postcard?.path
      // 获取到路由path。进行拦截处理。这里if中可以进行登陆判断。就可以全局拦截
        if (false){
            callback?.onInterrupt(null) //没有登陆
      }else{
           callback?.onContinue(postcard) //已经登陆
       }
    }

}
 class LoginNavigationCallbackImpl:NavigationCallback {
    override fun onFound(postcard: Postcard?) {
        Log.i("TAGss", "LoginNavigationCallbackImpl: onFound ")
    }

    override fun onLost(postcard: Postcard?) {
        Log.i("TAGss", "LoginNavigationCallbackImpl: onLost ")
    }

    override fun onArrival(postcard: Postcard?) {
        Log.i("TAGss", "LoginNavigationCallbackImpl: onArrival ")
    }

    override fun onInterrupt(postcard: Postcard?) {
        Log.i("TAGss", "onInterrupt: 请先登录 ")
      //跳转到登陆界面。
        ARouter.getInstance().build(ArouterContains.Login).navigation()
    }
}

那我们在使用跳转的时候只需要加上这个LoginNavigationCallbackImpl实现类就行。

  ARouter.getInstance().build(ArouterContains.DESIGN_MODEL).
  navigation(this,LoginNavigationCallbackImpl())

这样ARouter默认在跳转的时候会拦截路由进行登陆判断,我们只需要在需要登陆的路由添加这个实现类就可以,不用再每次手动写登陆判断代码。

今天是不是又学习到了一个小知识呢?,如果对您有帮助,请在下方点击关注,一起学习进步。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表