Android 6中已经缓存了数据(SharedPreferences)。

3

我使用 SharedPreference 在用户登录后保存用户名,并在用户注销清除它。

当我启动应用程序时,我将检查该值,如果该值为null,则需要登录才能使用。

然而,在android 6.0上进行检查时:

Login (save username - Toast show not null) > Logout (remove username - Toast show null) > Remove App > Reinstall app > StartApp (not login - Toast show not null, this value is user that used => issue)

这个问题不会出现在 Android < 6.0 上。
以下是我的代码:
在应用程序中初始化 sharedpreference:
public static SharedPreferences getPref() {
    return mInstance.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}

请检查登录:

if (App.getPref().getString("username", null) == null){
   //Login
}

登录成功后保存:

                App.getPref().edit()
                                .putString("username", s.getLoggedInUser().getUsername())
                                .putString("profilePicUrl", s.getLoggedInUser().getProfilePicUrl())
                                .putString("pk", s.getLoggedInUser().getPk())
                                .apply();

退出时清除:

   App.getPref().edit().clear().apply();

你的问题是什么? - Gaurav
请查看我的问题中第4行的情景描述:在我清除应用程序的共享首选项后重新安装应用程序并从共享首选项读取数据,数据不为空。 - MsBao
好的,明白了。这是由于自动备份引起的,该功能在M中引入。 - Gaurav
1个回答

1
这是由Marshmallow引入的自动备份功能导致的。
它会对您的数据进行备份,并在重新安装时使用该备份。
如果您想从设置中关闭它 -> 备份和重置 -> 自动恢复。

enter image description here

但是对于您的应用程序,我建议使用共享首选项。在注销时,将键设置为“username”,值为null,并进行提交。
或者在您的清单中简单地添加android:allowBackup="false"

嗨,@Gaurav。我不知道Android 6.0中的备份模式。非常感谢。 - MsBao
嗨@Gaurav,我更新了我的代码,但在我将备份更改为false之前备份的用户名仍然自动恢复。如何从我的代码中删除自动恢复。 - MsBao
哦,那么在注销时将“用户名”赋值为null是唯一的选择。 - Gaurav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接