如何解决Kotlin 使用共享首选项登录和注销
我正在使用共享首选项登录和注销应用程序的用户。一旦用户登录,在应用程序被杀死并重新启动后,登录屏幕不会再次显示。但是当我进入应用程序并转到登录页面后的屏幕并按后退按钮时,它再次显示登录屏幕。即使按下后退按钮,我也不希望再次显示登录屏幕。我希望它在按下后退按钮时完全退出应用程序。 这是我的登录代码:
val sp = getSharedPreferences("login",MODE_PRIVATE)
if (sp.getBoolean("logged",false))
{
login()
}
loginButton.setonClickListener() {
login()
sp.edit().putBoolean("logged",true).apply()
Log.v("Login Msg","Login button clicked")
getusername = findViewById(R.id.usernameEditText)
var username = usernameEditText.text
Log.v("username",username.toString())
getpass = findViewById(R.id.passEditText)
var pass = passEditText.text
Log.v("pass",pass.toString()) }
fun login() {
val i = Intent(this,HomeActivity::class.java)
startActivity(i)
}
这是注销的代码:
logoutButton.setonClickListener(){
logout()
val sp = getSharedPreferences("login",MODE_PRIVATE)
sp.edit().putBoolean("logged",false).apply()
Log.v("logout msg","logout button clicked")
}
fun logout(){
val i = Intent(this,LogInActivity::class.java)
startActivity(i)
}
解决方法
实际上我们可以在每个活动中覆盖“返回按钮”方法。
下面我重用你的代码来管理按下后退按钮时的注销,也许这就是你要找的
override fun onBackPressed() {
super.onBackPressed()
val sp = getSharedPreferences("login",MODE_PRIVATE)
sp.edit().putBoolean("logged",false).apply()
logout()
}
,
发生这种情况是因为登录活动在转到 HomeActivity 后仍然在后台堆栈中。要实现您的要求,您必须在转到 HomeActivity 之前从返回堆栈中删除所有内容。
将您的登录功能替换为以下功能。
fun login() {
val i = Intent(this,MainActivity::class.java)
i.run {
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
startActivity(i)
}
这里我们基本上是向意图添加一组标志。
Intent.FLAG_ACTIVITY_CLEAR_TOP 清除当前视图下的所有视图
Intent.FLAG_ACTIVITY_CLEAR_TASK 我们正在删除现有任务
Intent.FLAG_ACTIVITY_NEW_TASK我们正在为 HomeActivity 创建一个新任务。
Intent.FLAG_ACTIVITY_CLEAR_TASK 和 Intent.FLAG_ACTIVITY_NEW_TASK 应该一起使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。