Android 登录处理简单实例(源码下载)

作者:lqh 时间:2023-06-22 11:44:43 

Android 登录处理简单实例

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

效果如图:

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("登录成功");
   }
 }

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

Demo 地址

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/lv_fq/article/details/67108512

标签:Android,登录处理
0
投稿

猜你喜欢

  • ChatGPT介绍及Java API调用

    2021-07-06 07:53:55
  • 微信公众平台开发教程(三) 基础框架搭建

    2022-08-12 00:33:50
  • 详解Android 全局弹出对话框SYSTEM_ALERT_WINDOW权限

    2023-06-28 04:07:44
  • JAVA 获取系统当前时间实例代码

    2022-09-01 05:53:01
  • 分别在Groovy和Java中创建并初始化映射的不同分析

    2023-11-26 08:15:42
  • c# 类成员初始化顺序的特殊情况

    2021-07-04 18:04:45
  • 详解Java Streams 中的异常处理

    2021-09-03 11:26:11
  • Intellij idea热部署插件JRebel的使用

    2022-12-02 14:13:27
  • C#路径,文件,目录及IO常见操作汇总

    2022-05-03 21:21:13
  • Java 设计模式以虹猫蓝兔的故事讲解简单工厂模式

    2021-10-19 21:20:08
  • Java数组越界问题实例解析

    2023-10-25 18:16:23
  • java对象拷贝常见面试题及应答汇总

    2022-01-08 00:01:52
  • Linux下Java开发环境搭建以及第一个HelloWorld

    2023-11-06 01:09:57
  • 详细分析JAVA8新特性 Base64

    2022-07-09 15:41:21
  • Android键盘输入语言设置默认打开myanmar缅甸语的步骤

    2021-07-01 17:15:44
  • SpringCloud学习笔记之OpenFeign进行服务调用

    2021-05-25 12:32:58
  • C++异常处理 try,catch,throw,finally的用法

    2021-08-21 21:29:55
  • 关于SpringCloud的微服务结构及微服务远程调用

    2021-11-06 20:11:45
  • 如何使用JCTools实现Java并发程序

    2023-11-21 07:37:39
  • C#(asp.net)多线程用法示例(可用于同时处理多个任务)

    2022-03-09 01:41:30
  • asp之家 软件编程 m.aspxhome.com