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
- Android 跳转判断是否登录的进一步封装
- Android打开界面时判断是否登录,未登录跳转登录界面,登录完成后直接跳转要打开的界面
- android recycleView的进一步封装
- 过滤器判断是否登录跳转主页
- Android判断是否首次登录
- 判断Session是否登录,否则跳转登录页面
- OkHttpUtils进一步的封装
- Android判断是否有网络跳转
- 点击tabbarItem添加是否跳转登录页面判断
- Android登录判断,并且在登录后跳转到相应的Activity
- Android判断网络是否连接,跳转到设置页面以及判断连接的是什么网络
- Android判断网络是否连接,跳转到设置页面以及判断连接的是什么网络
- android网络访问框架OkHttp的进一步封装
- android 判断登录是否邮箱或手机号
- mybatis框架的进一步封装
- 判断用户是否登录,如果登录了放行,否则跳转到登陆页面
- react-navigation 如何判断用户是否登录跳转到登录页
- 判断用户是否登录的模拟
- java中类中创建本类实例的疑问
- 稳定婚姻问题(The Stable Marriage Problem)
- 获取Spring中bean对象或在Spring初始化完成之后使用Spring中bean对象
- OpenWRT基本知识
- Debian时间同步
- Android 跳转判断是否登录的进一步封装
- PopupWindow设置底部,兼容7.0 与 在华为等带虚拟控制栏被遮挡
- 机器学习基础算法小结
- 事务并发控制
- 骑士周游,Knight Tour
- 1058. A+B in Hogwarts (20)
- 宏碁电脑双硬盘安装系统需要注意的几点问题
- sql语言基础
- ubuntu切换java版本