Android Retrofit统一处理 token失效跳转到登录页面

文章目录

  • 1.问题引入
  • 2.解决方案

1.问题引入

在客户端开发中,我们可能会遇到token失效问题,这个时候我们可以刷新token或者跳转到登录页面,这里我们就给出如何统一处理token失效问题,基于Retrofit。

2.解决方案

在BaseFilterObserver(implements Observer)中重写onNext方法

 public void onNext(@NonNull ResultStatus t) {
        if (t.getCode()==401){
            ActivityAnimationUtil.INSTANCE.enterActivityAnimation(BaseApplication.Companion.getActivity(),RegisterOrLoginActivity.class);
        }
    }

当token失效返回特定的错误码,然后跳转到登录页面。
跳转activity我们需要一个Activity实例对象。我们可以维护一个activity栈或者通过ActivityLifecycleCallbacks接口获取,这里给出获取activity的方法。在BaseApplication中初始化

  private fun initActivity() {
        registerActivityLifecycleCallbacks(object : ActivityLifecycleCallbacks {
            override fun onActivityPaused(activity: Activity) {
                mActivity = activity
            }

            override fun onActivityResumed(activity: Activity) {
                mActivity = activity
            }

            override fun onActivityStarted(activity: Activity) {
                mActivity = activity
            }

            override fun onActivityDestroyed(activity: Activity) {
                mActivity = activity
            }

            override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle?) {
                mActivity = activity
            }

            override fun onActivityStopped(activity: Activity) {
                mActivity = activity
            }

            override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
                mActivity = activity
            }
        })
    }

提供外部接口

    companion object {
        @SuppressLint("StaticFieldLeak")//防止内存泄漏,也可以使用软引用
        private  var mActivity: Activity?=null
        fun getActivity() = mActivity
    }

你可能感兴趣的:(Android应用层)