SharedPreferences不立即删除值

问题描述 投票:0回答:2

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

这是我的代码:

启动画面:

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);
    }

谢谢!

android android-sharedpreferences
2个回答
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);

}

0
投票

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

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

希望这对你有用。

© www.soinside.com 2019 - 2024. All rights reserved.