Android登录的简单处理

发布时间 - 2026-01-11 00:23:46    点击率:

今天整理一下之前在项目中写的关于某些界面需要登录判断处理。这里整理了一个简易的 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 地址

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


# Android  # 登录  # Android开发之登录验证实例教程  # Android集成新浪微博第三方登录的方法  # Android设计登录界面、找回密码、注册功能  # Android实现登录功能demo示例  # Android开发之注册登录方法示例  # 功能强大的登录界面Android实现代码  # Android集成微信登录的步骤详解  # Android属性动画实现炫酷的登录界面  # Android调用第三方QQ登录代码分享  # Android开发实例之登录界面的实现  # 跳转  # 回调  # 要在  # 还请  # 有什么  # 看着  # 会有  # 第一个  # 是有  # 这么多  # 开了  # 就把  # 大神  # 再来  # 可以看到  # 写到  # 如图  # 最主要  # 用户登录  # 不等于 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: JS实现鼠标移上去显示图片或微信二维码  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何快速搭建高效香港服务器网站?  python中快速进行多个字符替换的方法小结  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  Python数据仓库与ETL构建实战_Airflow调度流程详解  Laravel如何处理和验证JSON类型的数据库字段  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel Session怎么存储_Laravel Session驱动配置详解  如何快速查询域名建站关键信息?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  JavaScript模板引擎Template.js使用详解  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Android利用动画实现背景逐渐变暗  怎么用AI帮你为初创公司进行市场定位分析?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  使用豆包 AI 辅助进行简单网页 HTML 结构设计  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  如何用PHP工具快速搭建高效网站?  如何挑选优质建站一级代理提升网站排名?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  高防服务器:AI智能防御DDoS攻击与数据安全保障  Laravel怎么在Blade中安全地输出原始HTML内容  Swift中循环语句中的转移语句 break 和 continue  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何用PHP快速搭建高效网站?分步指南  简历在线制作网站免费版,如何创建个人简历?  如何快速搭建安全的FTP站点?  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何安全更换建站之星模板并保留数据?  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何处理异常和错误?(Handler示例)  如何用景安虚拟主机手机版绑定域名建站?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何实现javascript表单验证_正则表达式有哪些实用技巧  创业网站制作流程,创业网站可靠吗?  Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置  iOS UIView常见属性方法小结  微信小程序 HTTPS报错整理常见问题及解决方案  EditPlus中的正则表达式实战(6)  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  高端智能建站公司优选:品牌定制与SEO优化一站式服务