重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android应用中是如何对登录进行处理的?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
成都创新互联服务项目包括鄱阳网站建设、鄱阳网站制作、鄱阳网页制作以及鄱阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,鄱阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到鄱阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
先从核心代码开始看:
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("登录成功"); } }
看完上述内容,你们掌握Android应用中是如何对登录进行处理的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!