SharedPreferences不立即删除值

时间:2018-03-12 16:34:08

标签: android android-sharedpreferences

我在用户登录时将用户ID存储在SharedPreferences中 如果SharedPreferences中的id不为null,我检查用户何时打开应用程序,以便应用程序打开其主屏幕,而不要求用户再次登录。此外,当用户注销时,我从SharedPreferences中删除了他的id。 但是,当用户注销并尝试从最近的应用程序打开应用程序时,应用程序将打开其主屏幕,而不会要求用户再次登录。 但是当用户按下并重新打开应用程序时,应用程序将要求用户再次登录,因此我确信SharedPreferences已成功删除,但我不知道最近的应用程序列表有什么问题!< / p>

这是我的代码:

启动画面:

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SharedPreferencesManager prefs = SharedPreferencesManager.getInstance(getApplicationContext());

        Intent intent;

        if (prefs.getUserId() != null) {

            intent = new Intent(SplashActivity.this, mainscreen.class);

        } else {

            intent = new Intent(SplashActivity.this, SignIn.class);
        }

        startActivity(intent);

        finish();

    }
}

SharedPreferencesManager:

public class SharedPreferencesManager {

    private static SharedPreferencesManager sharedPreferencesManager = new SharedPreferencesManager();
    private static SharedPreferences sharedPreferences;
    private static SharedPreferences.Editor editor;
    private static final String NAME = "General";

    public static SharedPreferencesManager getInstance(Context context) {
        if (sharedPreferences == null) {
            sharedPreferences = context.getSharedPreferences(NAME, Activity.MODE_PRIVATE);
            editor = sharedPreferences.edit();
        }
        return sharedPreferencesManager;
    }

    public void setUserId(String ID){
        editor.putString("UserID", ID).commit();
    }


    public String getUserId(){
        return sharedPreferences.getString("UserID", null);
    }


    public void removeUserId(){
         editor.remove("UserID").commit();
    }

}

注销:

public void logout(){

        SharedPreferencesManager prefs = SharedPreferencesManager.getInstance(getApplicationContext());

        prefs.removeUserId();
        Intent intent = new Intent(this, SignIn.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }

谢谢!

2 个答案:

答案 0 :(得分:3)

你应该在你的Main活动中覆盖onResume方法,如下所示:

@Override
public void onResume(){
    super.onResume();

SharedPreferencesManager prefs = SharedPreferencesManager.getInstance(getApplicationContext());

        Intent intent;

        if (prefs.getUserId() == null) {

            intent = new Intent(MainActivity.this, SignIn.class);
        }

        startActivity(intent);

}

答案 1 :(得分:0)

不是删除值而是将值设置为null。

     public void removeUserId(){
        editor.putString("UserID", null).commit();
    }

希望这对你有用。