android13打基础: 保存用户免得下次重新登录逻辑

使用SP来做

  • 创建LoginUser.kt
kotlin 复制代码
// 登录用户需要Email
data class LoginUser(
    val email: String,
    val password: String,
)
  • 创建假数据FakeLoginUser.kt
kotlin 复制代码
object FakeLoginUser {
    val fake_login_user_items = arrayListOf(
        LoginUser(
            email = "1690544550@qq.com",
            password = "123",
        ),

        LoginUser(
            email = "13266263124@139.com",
            password = "123",
        ),

        LoginUser(
            email = "17876215013@139.com",
            password = "123",
        ),
    )
}
  • 创建登录退出SP常量
kotlin 复制代码
// 提供给登录退出使用的SP常量
object LoginLogoutCons {
    val is_logged_in: String = "is_logged_in"
    val email: String = "email"
    val user_prefs = "user_prefs"
}
  • 处理界面逻辑1: 登录
java 复制代码
    // 持有sp对象
    private SharedPreferences sharedPreferences;

// 再一些初始化和声明周期函数上
	   // 获取SharedPreferences实例
        sharedPreferences = getActivity()
                .getSharedPreferences(LoginLogoutCons.INSTANCE.getUser_prefs(),
                        Context.MODE_PRIVATE);
  // 检查是否已经登录
        if (isLoggedIn()) {
            // 如果已登录,跳转到主界面,这里是再Fragment做的,所以是getActivity()
            startActivity(new Intent(getActivity(), ContainerActivity.class));
        }
	
	// 没有的话,处理登录按钮的逻辑,对应处理输入框的逻辑
	// 。。。省略代码
	// 跳转登录前,保存状态信息,调用此函数
	    // 保存登录状态
    private void saveLoginStatus(boolean isLoggedIn, String oneValue) {
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), isLoggedIn);
        // todo: 这个value用来处理登录
        editor.putString(LoginLogoutCons.INSTANCE.getEmail(), oneValue);
        editor.apply();
    }


 // 使用sharedpreference来处理登录状态
    private boolean isLoggedIn() {
        return sharedPreferences.getBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false);
    }
  • 处理界面逻辑1: 退出
java 复制代码
	// 持有SP对象
	   private SharedPreferences sharedPreferences;

// 在一些生命周期函数
	  // 获取SharedPreferences实例
        sharedPreferences = getActivity()
                .getSharedPreferences(LoginLogoutCons.INSTANCE.getUser_prefs(), MODE_PRIVATE);
        // 检查是否已经登录
        if (!sharedPreferences.getBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false)) {
            // 如果未登录,跳转到登录页面
            startActivity(new Intent(getActivity(), LoginActivity.class));
            return;
        }

        binding.btnLogout.setOnClickListener(v -> {
            logout();
        });



  // 处理退出登录按钮
    private void logout() {
        // 清除登录状态和用户信息
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putBoolean(LoginLogoutCons.INSTANCE.is_logged_in(), false);
        editor.putString(LoginLogoutCons.INSTANCE.getEmail(), null);
        editor.apply();

        // 跳转到登录页面,并结束当前活动
        startActivity(new Intent(getActivity(), SplashActivity.class));
        XToastUtils.toast("退出登录成功");
    }

记得初始化SP对象

相关推荐
懂软件的胡子个哥10 小时前
微信 API 消息回调怎么设计,才能避免丢消息和重复处理
运维·微信·架构·wechatapi·个人微信号二次开发
懂软件的胡子个哥14 小时前
微信群运营怎么通过微信 API 做问题提醒和活动管理
微信·自动化·wechatapi·个人微信号二次开发
iPad协议个微协议15 小时前
微信数据同步怎么做异常补偿,避免 CRM 和业务系统数据不一致
微信·微信开发·wechatapi·个人微信号二次开发
本人手速666+19 小时前
WeComApi 适合哪些企业微信二次开发场景?从外部群、自动回复到 CRM 对接
微信·企业微信·企微外部群开发·wecomapi·企业微信二次开发
iPad协议个微协议1 天前
# 微信自动营销系统如何基于 WechatApi 做事件驱动设计
android·微信·企业微信·个人开发·wechatapi·微信个人号开发
软擎2 天前
微信聊天记录怎么导出给AI分析?用它仅需4步,即可导出PDF、HTML、Excel三种格式,轻松导出所有聊天记录做AI分析
微信·聊天记录导出工具·轻虾导出助手
本人手速666+2 天前
企业微信 API 接入层如何降低业务系统复杂度
运维·网络协议·微信·自动化·ipad
本人手速666+2 天前
企业微信二次开发中的事件驱动架构:如何把外部事件变成内部流程
微信·自动化·企业微信·个人开发·微信开放平台
xiezhr2 天前
微信里多了个[小微],可以帮你看朋友圈、发消息、点外卖了
微信·aigc·agent