0

我在登录时使用 EncryptedSharedPreferences 存储值...我想更改家庭活动导航抽屉中的文本

所以当用户登录时它会显示logout否则它将显示login导航抽屉

登录活动:--------

 sharedPreferences = EncryptedSharedPreferences.create(
        "secret_shared_prefs",
        masterKeyAlias,
        baseContext,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
        EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    ) as EncryptedSharedPreferences

登录时我这样做

  val editor = sharedPreferences.edit()
   editor.putString("EmailId", edtEmailId)
   editor.putString("password", edtPassword)
     editor.apply()

签入 Homeactivity:---------

        val menu: Menu = bind.navRightView.getMenu()

    val nav_connection: MenuItem = menu.findItem(R.id.nav_login)

   val sharedPreference =
            applicationContext.getSharedPreferences("secret_shared_prefs", Context.MODE_PRIVATE)
    val value: String = sharedPreference.getString("EmailId", null).toString()

    if(!sharedPreference.contains(value))
    {
        nav_connection.title = "Loginn"

    }
    else{
        nav_connection.title = "Logout"

    }

此代码的良好输出始终具有标题为 loginn,这意味着它将值检测为 null 需要 EncryptedSharedPreferences 的帮助谢谢

4

1 回答 1

0

您正在添加值,但没有将它们保存到SharedPreferences.
您应该使用commit()or apply()

做这个:

   val editor = sharedPreferences.edit()
   editor.putString("EmailId", edtEmailId)
   editor.putString("password", edtPassword)
   editor.apply() // Important

我也看到你在打电话

val sharedPreference = applicationContext.getSharedPreferences("secret_shared_prefs", Context.MODE_PRIVATE)`

这给了你正常的SharedPreference,我猜。
你应该使用:

val sharedPreferences = EncryptedSharedPreferences.create(
        "secret_shared_prefs",
        masterKeyAlias,
        baseContext,
        EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
        EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
    ) as EncryptedSharedPreferences


然后检查电子邮件地址是否为空。

if(!sharedPreference.contains("EmailId") 
    nav_connection.title = "Loginn"
else 
    nav_connection.title = "Logout"
于 2020-12-24T09:35:40.107 回答