使用共享首选项登录kotlin时出错



我试图使用共享首选项来跳过登录活动。如果用户点击复选框,这意味着他下次使用去应用程序时,将直接进入去主活动。这是代码

val checkbox = checkBoxLog
val sharedPref:SharedPreferences = this.getSharedPreferences("prefName", Context.MODE_PRIVATE)
val editor:SharedPreferences.Editor = sharedPref.edit()
if(checkbox.isChecked){
editor.putBoolean("Checkbox", true)
editor.apply()
Log.d("hola", "presente")
startActivity(Intent(this, MainActivity::class.java))
finish()
}

我将展示一个示例流程,说明在用户注册后,如何跳过登录片段,或者在不完全跳过的情况下跳过登录片段。

当用户第一次启动应用程序并显示登录片段时,在输入凭据后,当用户单击登录按钮时,保存一个字符串首选项值,如下所示。

with(
requireContext().getSharedPreferences(
"preference_login_key", Context.MODE_PRIVATE
).edit()
) {
putString(
"preference_login_status",
"user_logged_in"
)
commit()
}

现在,在这一点上,我们将首选项字符串值保存为具有关键字preference_login_keypreference_login_status中的user_logged_in,并转到下一个片段。

在任何时候,如果用户从应用程序注销,您必须使用下面显示的preference_login_key键将preference_login_status中的值更改为user_not_available

with(
requireContext().getSharedPreferences(
"preference_login_key", Context.MODE_PRIVATE
).edit()
) {
putString(
"preference_login_status",
"user_not_available"
)
commit()
}

如果你想从偏好中检查是否有现有用户,你可以这样做,然后决定用户必须导航到哪个点或目的地。

val sharedPref = requireContext().getSharedPreferences(
"preference_login_key", Context.MODE_PRIVATE
)
with(
sharedPref.getString(
"preference_login_status",
"user_not_available"
)
) {
if (!this.equals("user_logged_in")) {
// User is not logged-in, so take him back to login fragment
}
}

在上面的代码中,首先获取我们引用的首选项(preference_login_key(,并读取其中存储的字符串(preference_login_status(。现在检查或比较这两个字符串(user_logged_inuser_not_available(。如果字符串不匹配,则没有用户登录,请将用户带回登录屏幕。

在片段的onCreate()中执行此检查操作。

最新更新