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

来源:互联网 发布:mysql开发工具 编辑:程序博客网 时间:2024/06/08 18:11

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 0
原创粉丝点击