目录

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

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

使用SP来做

  • 创建LoginUser.kt
// 登录用户需要Email
data class LoginUser(
    val email: String,
    val password: String,
)
  • 创建假数据FakeLoginUser.kt

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常量
// 提供给登录退出使用的SP常量
object LoginLogoutCons {
    val is_logged_in: String = "is_logged_in"
    val email: String = "email"
    val user_prefs = "user_prefs"
}
  • 处理界面逻辑1: 登录
    // 持有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: 退出
	// 持有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对象