我希望我的应用程序在用户注销时删除所有首选项,并在退出主屏幕后显示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();
}
答案 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();
}