Android 跳转判断是否登录的进一步封装

Android 进入界面判断是否登录.如果登录直接进入界面,未登录就跳转到登录,登录成功后直接进入之前要进入的界面

看起来有点绕口,其实就是一个界面跳转的小东西
目录如下

如下

  • AppApplication类 系统类
  • LoginActivity 登录界面
  • NumberOneActivity 界面 A
  • NumberTwoActivity 界面 B
  • AppEnv类 用来存放一些数据
  • *IntentEvent类,用来接收行为
  • IntentRequestCode 类,存放请求码
  • BaseActivity 父类,接收,注册和销毁EventBus
  • LoginChecker 登录检测界面

其实重点是在 LoginChecker类中,先看一下代码

public class LoginChecker extends BaseActivity {

    static LoginCallback mCallback;

    public interface LoginCallback {
        void onLogined();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent(this, LoginActivity.class);
        startActivityForResult(intent, IntentRequestCode.Login);
    }

    public static void doAfterLogin(@NonNull LoginCallback callback){
     // 为了方便测试,这里传入false, 表示用户没有登录
      if (isLogined(false)) {
          callback.onLogined();
      }else {
          mCallback = callback;
          Intent intent = new Intent(AppEnv.getApplicationContext(), 
          LoginChecker.class);
          EventBus.getDefault().post(new IntentEvent(intent));
        }
    }

    /**
     * 检测是否登录成功,
     * 
     * @param logined 实际开发中不需要传入此参数,
     * @return
     */
    public static boolean isLogined(boolean logined) {
        return logined;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        finish();
        // 这里传入true.是指从登录界面登录后,从新获取到正确的登录token
        if (isLogined(true) && requestCode == IntentRequestCode.Login) {
            if (mCallback != null) {
                mCallback.onLogined();
            }
        }
        mCallback = null;
    }
}

BaseActivity

public class BaseActivity extends AppCompatActivity {

    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onResume() {
        super.onResume();
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        EventBus.getDefault().unregister(this);
    }

    @Override
    public void startActivity(Intent intent) {
        super.startActivity(intent);
        overridePendingTransition(0, 0);
    }

    @Override
    public void startActivityForResult(Intent intent, int requestCode) {
        super.startActivityForResult(intent, requestCode);
        overridePendingTransition(0, 0);
    }

    @Subscribe
    public void onEvent(IntentEvent event) {
        switch (event.getType()) {
            case StartActvity:
                startActivity(event.getIntent());
                break;

            case StartActivityForResult:
                startActivityForResult(event.getIntent(), event.getRequestCode());
                break;

            case StartService:
                startService(event.getIntent());
                break;

            case SendBroadcast:
                sendBroadcast(event.getIntent());
                break;
        }
    }

}

NumberOneActivity

public class NumberOneActivity extends BaseActivity {

    OneBinding mBinding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this,R.layout.one);
        init();
    }
    private void init(){
        mBinding.oneButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LoginChecker.doAfterLogin(new LoginChecker.LoginCallback() {
                    @Override
                    public void onLogined() {
                        Intent intent  = new Intent(NumberOneActivity.this,NumberTwoActivity.class);
                        startActivity(intent);
                    }
                });
            }
        });
    }
}

NumberTwoActivity

public class NumberTwoActivity extends BaseActivity {

    TwoBinding mBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this,R.layout.two);
    }
}

LoginActivity

public class LoginActivity extends BaseActivity {

    LoginBinding mBinding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = DataBindingUtil.setContentView(this,R.layout.login);
        init();
    }

    private void init(){
        mBinding.login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setResult(RESULT_OK);
                finish();
            }
        });
    }
}

IntentRequestCode

public class IntentRequestCode {
    public static final int Login = 1000;
}

IntentEvent

public class IntentEvent {

    private Type type;
    private Intent intent;
    private int requestCode; // only using for StartActivityForResult.

    public enum Type {
        StartActvity, StartActivityForResult, StartService, SendBroadcast
    }

    public IntentEvent(Intent intent) {
        this.type = Type.StartActvity;
        this.intent = intent;
    }

    public IntentEvent(Type type, Intent intent) {
        this.type = type;
        this.intent = intent;
    }

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }

    public Intent getIntent() {
        return intent;
    }

    public void setIntent(Intent intent) {
        this.intent = intent;
    }

    public int getRequestCode() {
        return requestCode;
    }

    public void setRequestCode(int requestCode) {
        this.requestCode = requestCode;
    }
}

AppEnv

public class AppEnv {

    private static Context mAppContext;

    public static void init(Context context) {
        mAppContext = context.getApplicationContext();
    }

    public static Context getApplicationContext(){
        return  mAppContext;
    }
}

AppApplication

public class AppApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        AppEnv.init(this);
    }
}

重点是在doAfterLogin 这个函数中,调用isLogined函数来检测是否登录,如果登录了,就执行回调 ,未登录的情况下,创建一个 Intent,把这个 Intent当做参数放到 EventBus的消息中, (要启动的对象是自身),在 BaseActivity中注册的 EventBus 接收到消息后,获取传过去的 Intent,并启动,在 BaseActivity中重写startActivity函数,设置透明度 overridePendingTransition(0, 0);.这样就启动了LoginChecker,在 onCreate中又用startActivityForResult启动了 LoginActivity, 然后在onActivityResult 中,判断登录的情况,..应该有点绕,对项目大一点的同学来说,这样做应该比较方便后期维护! 匆忙之间写下的,有错误的地方,或者有更好的方法,欢迎各位同学留言指出

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值