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

相关推荐
jeffzhengye1 天前
Claude-Real-Video:让 Claude 真正看懂视频,0 Token 成本
python·微信
毛丫讲绘本5 天前
独立老师开始做绘本课,怎样做少走弯路?
人工智能·学习·微信·微信公众平台·微信开放平台
行思理6 天前
微信支付“商家转账用户确认模式”,新手教程
java·开发语言·微信
wechatbot8886 天前
企业微信 AI 自动化运营:RPA 与 API 方案效果实测
人工智能·微信·自动化·企业微信·rpa
星期一研究室10 天前
创作分发这件事,来看看Codex是怎么做的
人工智能·黑客·微信
随性而行36013 天前
微信API接口与AI自动化:开发者的实现思路
运维·服务器·开发语言·人工智能·微信·自动化
2601_9630162616 天前
统一消息与事件调用:如何用微信接口把微信自动化做成稳健中台?
大数据·运维·人工智能·微信·自动化
微信开发api-视频号协议18 天前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
微信开发api-视频号协议20 天前
企业微信二次开发中的文件系统设计:媒体资源、临时文件与业务附件
前端·微信·企业微信·媒体·ipad·微信开放平台
微信开发api-视频号协议20 天前
Codex++安全边界探秘:从模型能力到风险防御
前端·安全·微信·企业微信