微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Kotlin 使用共享首选项登录和注销

如何解决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_TASKIntent.FLAG_ACTIVITY_NEW_TASK 应该一起使用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。