首页 > 系统 > Android > 正文

Android登录的简单处理

2019-12-12 03:15:40
字体:
来源:转载
供稿:网友

今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 Demo 模拟一下 登录情况 和 未登录情况 下的界面跳转处理, 效果如图:

以上分别模拟了,未登录和已登录 情况下的 界面跳转和当前界面事件处理。接下来我们来看一下实现方式。
先从核心代码开始看:

public class GoLoginUtil { public static final String CLASSNAME = "className"; public static final int CODE_LOGIN = 1; // 登录成功回调 用于onActivityForResult 判断 /**  * 登录成功之后,通过 activityResult 回调到当前界面  *  * @param activity  * @param intent  * @param requestCode  */ private static void startActivity(Activity activity, Intent intent, int requestCode) {  if (requestCode == -1) {   String targetClass = intent.getComponent().getClassName(); // 目标类   intent.putExtra(CLASSNAME, targetClass);  }  intent.setClass(activity, LoginActivity.class); // 跳转重定向到登录界面  activity.startActivityForResult(intent, requestCode); } /**  * 登录成功之后,直接跳转目标 Activity  *  * @param activity  * @param intent  */ public static void startActivity(Activity activity, Intent intent) {  startActivity(activity, intent, -1); } /**  * 登录成功回调到当前界面  * 使用 onActivityResult 方法接收, requestCode = CODE_LOGIN  *  * @param activity  * @param intent  */ public static void startActivityForResult(Activity activity, Intent intent) {  startActivity(activity, intent, CODE_LOGIN); }}

这里可以看到,最主要的就是第一个 private 修饰的 startActivity 方法,看过 Android Activity 的 startActivity 方法源码的应该知道,它里面其实就是调用的 startActivityForResult(intent , -1) . 所以我们这里也来用一下它的写法。如果 等于 -1 ,那么就说明是有跳转目标 Activity 的,那么我们就通过 Intent.getComponent().getClassName() 来获取目标 Activity 的类名,再次添加到 Intent参数中,用于我们登录成功之后的后续跳转目标。当然,intent 中的其他参数是会一直携带着的,这里不用担心其他参数。 不等于 -1 那么就是要进行 setResult 回调了。所以,我们是通过 requestCode 是否等于 -1 来区分是继续跳转,还是回调当前界面。 工具类中的下面两个方法,就把功能区分开了,这里基本上看着系统源码来的。

然后再来进行一下二次封装,这里就需要判断当前 登录状态了,这里我也是模拟一下登录状态,代码如下:

public class IntentUtil { public static boolean isLogin; // 模拟获取当前用户登录状态。 /**  * 需要登录判断  *  * @param activity  * @param clazz  * @param bundle  */ public static void startToLogin(Activity activity, Class clazz, Bundle bundle) {  Intent intent = new Intent(activity, clazz);  if (bundle != null) {   intent.putExtras(bundle);  }  if (isLogin) {   activity.startActivity(intent);  } else {   GoLoginUtil.startActivity(activity, intent);  } } /**  * 登录成功会有回调  * requestCode = Contants.CODE_LOGIN  *  * @param activity  * @param bundle  */ public static void startToLoginResult(Activity activity, Bundle bundle) {  Intent intent = new Intent();  if (bundle != null) {   intent.putExtras(bundle);  }  GoLoginUtil.startActivityForResult(activity, intent); }}

写到现在这样,基本上需要进行登录跳转界面的,可以直接调用 startToLogin 方法,根据登录状态进行跳转。至于 startToLoginResult 方法,目前还需要在调用时进行判断一下登录状态,进行区分处理,然后还要在 onActivityForResult 方法中进行回调处理,这个暂时没想到其他好的方法,各位大神如果有什么好的处理方式还请多多指教。

这里还没完呢,我们的登录界面也是需要一定的处理逻辑去进行配合的。我们来看一下怎么去配合:

public class LoginActivity extends FragmentActivity { private String targetClass; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_login);  targetClass = getIntent().getStringExtra(GoLoginUtil.CLASSNAME); // 目标跳转类 } public void onLoginClick(View view) {  // 模拟登录成功操作  if (!TextUtils.isEmpty(targetClass)) {   // 这里就是执行继续跳转操作   try {    Class clazz = Class.forName(targetClass);    getIntent().setClass(this, clazz);    startActivity(getIntent());    finish();   } catch (ClassNotFoundException e) {    e.printStackTrace();   }  } else {   // 这里是登录成功,回调到之前界面 onActivityForResult()中 方法可根据自己需求处理。。   setResult(RESULT_OK);   finish();  } }}

最后来看一下我们的调用方式:

/**  * 登录跳转  *  * @param view  */ public void onClick1(View view) {  Bundle bundle = new Bundle();  bundle.putString("content", et_content.getText().toString());  IntentUtil.startToLogin(this, LoginSuccessActivity.class, bundle); } /**  * 登录回调  *  * @param view  */ public void onClick2(View view) {  if (!IntentUtil.isLogin) {   IntentUtil.startToLoginResult(this, null);  } else {   tv_text.setText("登录成功");  } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  if (resultCode != RESULT_OK) {   return;  }  if (requestCode == CODE_LOGIN) {   tv_text.setText("登录成功");  } }

基本上要整理的就这么多。写法上的一些不足,还请各位多多指点。

Demo 地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表