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

相关推荐
凡泰极客科技14 小时前
如何让企业App像微信一样,运行短剧、外卖和小游戏?
微信
老三牛擦2 天前
业财一体化
微信
9624563 天前
微信第三方平台 component_access_token 间歇性过期故障技术复盘
微信
加我攻城狮4 天前
当大模型把「景区」定位到附近公共厕所:我的 AI 旅行小程序踩坑实录
后端·微信
开开心心_Every5 天前
电脑OCR识别软件支持表格识别图片转Excel
java·开发语言·微信·计算机外设·ocr·intellij-idea·excel
特视界说7 天前
没有完整 3D 模型,能做产品三维动画吗?
3d·微信·音视频·新浪微博
特视界说7 天前
产品宣传动画和企业宣传片有什么区别,应该先做哪个?
微信·音视频·新浪微博·新人首发
投资者内参7 天前
巴西资产飙升背后:两套经济路线博弈,机构看多,但债务等风险仍存
微信
wechatbot88810 天前
企业微信HTTP协议接口完整接入教程|全量消息收发 API 实战
网络协议·http·微信·企业微信·ai编程
wechatbot88810 天前
企微第三方自动化开发:原生能力无阉割 API 开放平台介绍
后端·ios·微信·企业微信·ai编程·ipad