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对象

相关推荐
张居斜3 天前
Obsidian + Claude Code + 微信AI,我把这三个系统缝进了一个软件
微信·obsidian·claude code·molio
Jinkey6 天前
要用户手机号真的是为了打骚扰电话吗?浅谈微信生态会员账号体系与资产合并
后端·微信·微信小程序
2601_9618451510 天前
粉笔行测题库|系统班|刷题
网络·百度·微信·微信公众平台·facebook·新浪微博
weikecms11 天前
聚合返利CPS小程序快速搭建教程
人工智能·微信·小程序
沉默王二12 天前
用Codex+iLink Bot API给Agent接入微信,基于这个开源Skill
微信·agent·claude
Szime13 天前
小批量电子元器件采购为什么更难?从研发打样到试产交付
微信
五月君_13 天前
安卓也支持了!微信链接 Claude Code 保姆级教程
android·微信
人道领域13 天前
为什么iPhone微信聊天记录搜不到“?“,而安卓可以。
android·微信·iphone
weikecms16 天前
消费返物业费 + 小区本地生活 CPS 系统|微客云(物业 / 社区 / 本地服务商首选)
人工智能·微信·微客云
Thomas_YXQ17 天前
Unity3D Addressable 深度优化热更性能消耗
开发语言·3d·unity·微信