注销时删除所有SharedPreferences

时间:2018-09-11 12:04:13

标签: java android sharedpreferences

我希望我的应用程序在用户注销时删除所有首选项,并在退出主屏幕后显示LoginActivity。我一直遵循建议here。以我的方式,我仅获得默认的首选项。

如果有帮助,我的应用程序的工作流程将以这种方式进行:

登录->将用户详细信息保存到首选项->开始MainActivity->注销->清除首选项->开始LoginActivity

问题是由使用默认首选项引起的吗?还是因为我叫finish()?我已经尝试过apply()commit()。两者都不起作用。当我尝试在LoginActivity中访问首选项时,它们仍然存在。如何清除我的偏好?

private void logout(){
    // clear preferences
    SharedPreferences sharedPreferences = this.getPreferences(Context.MODE_PRIVATE);
    sharedPreferences.edit().clear().apply();
    Intent i = new Intent(this, LoginActivity.class);
    startActivity(i); // call LoginActivity and finish this one.
    finish();
}

3 个答案:

答案 0 :(得分:2)

使用提交

SharedPreferences sharedPreferences =  getSharedPreferences("YourKey", MODE_PRIVATE);
sharedPreferences.edit().clear().commit();
Intent i = new Intent(this, LoginActivity.class);
startActivity(i);
finish();

答案 1 :(得分:2)

问题是您使用的是getPreferences()而不是getSharedPreferences()getDefaultSharedPreferences()

  

getPreferences()检索要访问的SharedPreferences对象   此活动专用的首选项。通过传入此活动的类名称作为首选项名称,即可简单地调用基础ContextWrapper.getSharedPreferences(String, int)方法。

由于getPreferences()使用类名作为首选项文件名,因此,您要插入一个Activity首选项文件中,并清除另一个文件。

有关详情,请参见:https://developer.android.com/reference/android/app/Activity#getPreferences(int)

答案 2 :(得分:0)

我建议您使用Easy Prefs之类的库来处理Sharedprefrences。 它具有方法Prefs.clear(),因此基本上可以清除所有共享的首选项。 这将使您很轻松地处理sharedPref。

或者,您也可以通过以下功能清除sharedpref:

public void clearPrefs(){
    SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = mySPrefs.edit();
    editor.clear();
    editor.apply();
}