1

我正在为登录用户存储身份验证令牌,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,它包含值,而在退出后它被清除。

这里有什么问题?我错过了一些非常明显的东西吗?请帮忙。

4

3 回答 3

1

最后,我让它工作了。问题是这两个活动在不同的进程中(因为我MapView在我的应用程序中使用了多个)。文档中提到SharedPreferences不支持在不同进程下使用。所以我移动SignInActivity了另一个在同一个主进程中,现在它运行良好。

这对我来说是一个非常明显的错误,我不得不为此挠头 4 个小时。因此,这可能会对处于类似情况的人有所帮助。

于 2012-09-11T09:59:27.457 回答
0
   Editor editor = pref.edit();
    editor.remove(Constants.SHARED_PREF_AUTH);
editor.commit();

会做

于 2012-09-11T09:33:08.080 回答
0

尝试自己设置字符串为 null:

editor.putString(Constants.SHARED_PREF_AUTH, null);
于 2012-09-11T09:33:13.080 回答