我正在为SharedPreferences
中的已登录用户存储身份验证令牌,并在注销时清除首选项。
private void doSignOut(){
SharedPreferences pref= getSharedPreferences(Constants.SHARED_PREF_DIR, Context.MODE_PRIVATE);
Editor editor = pref.edit();
editor.clear();
editor.apply();
boolean isCleared = editor.commit();
FLog.d("Is Pref cleared = " + isCleared);
mDbHelper.onUpgrade(mDbHelper.getWritableDatabase(), 0, 0);
mDbHelper.close();
Intent intent = new Intent(this, SignInActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
然后在我的SignInActivity
我检查authToken
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
ActionBar actionBar = getSupportActionBar();
actionBar.hide();
checkForSignIn();
}
private void checkForSignIn() {
SharedPreferences pref = getSharedPreferences(Constants.SHARED_PREF_DIR, Context.MODE_PRIVATE);
String authToken = pref.getString(Constants.SHARED_PREF_AUTH, null);
if(null == authToken){
showAnimations();
} else {
FLog.d("AuthToken already present " + authToken);
Intent intent = new Intent(getApplicationContext(), com.ribbon.ribbon.MainNavigationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
}
问题在于,checkForSignIn()
authToken不是null
而是保留实际值。
我在退出之前检查首选项xml并且它包含值,而在注销后它被清除。
这里有什么问题?我错过了很明显的东西吗? 请帮忙。
答案 0 :(得分:1)
最后,我得到了它的工作。问题是这两个活动是在不同的过程中(因为,我在我的应用程序中使用了多个MapView
)。 docs中提到SharedPreferences
不支持在不同进程下使用。所以我移动SignInActivity
而另一个移动到同一个主流程中,现在效果很好。
在我身边这是一个非常明显的错误,不得不在这个问题上划了4个小时。所以这可能会帮助处于类似情况的人。
答案 1 :(得分:0)
Editor editor = pref.edit();
editor.remove(Constants.SHARED_PREF_AUTH);
editor.commit();
会做
答案 2 :(得分:0)
尝试自己设置字符串为null:
editor.putString(Constants.SHARED_PREF_AUTH, null);