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("退出登录成功");
}