清除 sharedpreferences 的值

clear the value of sharedpreferences

我是 android 编程的新手,我正在设计一个具有登录页面和主页面的程序 page.When 我第一次使用用户名和密码登录,我创建了一个sharedpreferences 记住用户名,每当我进入程序时,它都会跳过登录页面并将我重定向到主 page.What 我想做的是,当我在登录页面中按注销按钮时,我希望 sharedpreferences 忘记我的用户名的值数据库(它不会从数据库中删除它)并强迫我使用相同或不同的用户名和密码再次登录,并且我不想在输入 application.I 时发现类似 [=16= 的内容时被重定向到主页]() 、SharedPreferences.Editor.clear()、commit() 等。但是代码没有 work.Can 你有帮助吗?

public static class SaveSharedPreference {
        static final String PREF_USER_NAME = "username";

    static SharedPreferences getSharedPreferences(Context ctx) {
        return PreferenceManager.getDefaultSharedPreferences(ctx);
    }

    public static void setUserName(Context ctx, String userName) {
        SharedPreferences.Editor editor = getSharedPreferences(ctx).edit();
        editor.putString(PREF_USER_NAME, userName);
        editor.commit();
    }

    public static String getUserName(Context ctx) {
        return getSharedPreferences(ctx).getString(PREF_USER_NAME, "");
    }
}

Button btnSignIn, btnSignUp;
    LoginDataBaseAdapter loginDataBaseAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_uye_kayit_giris);





    if (SaveSharedPreference.getUserName(UyeKayitGirisActivity.this).length() == 0) {
        Intent i = new Intent(UyeKayitGirisActivity.this, MainActivity.class);
        startActivity(i);
        // finish();
    }



        // create a instance of SQLite Database
        loginDataBaseAdapter = new LoginDataBaseAdapter(this);
        loginDataBaseAdapter = loginDataBaseAdapter.open();

        // Get The Refference Of Buttons
        btnSignIn = (Button) findViewById(R.id.buttonSignIN);
        btnSignUp = (Button) findViewById(R.id.buttonSignUP);

        // Set OnClick Listener on SignUp button
        btnSignUp.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // TODO Auto-generated method stub

                /// Create Intent for SignUpActivity  abd Start The Activity
                Intent intentSignUP = new Intent(getApplicationContext(), SignUPActivity.class);
                startActivity(intentSignUP);
            }
        });




    Button btn_exit;
    // super.onCreate(savedInstanceState);
    //   setContentView(R.layout.main1);

    btn_exit = (Button) findViewById(R.id.buttonLogOUT);
    btn_exit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

// WHAT SHOULD I WRITE IN HERE?????????????


            Toast.makeText(UyeKayitGirisActivity.this, "ÜYE GİRİŞİ TEKRAR ZORUNLU HALE GETİRİLDİ!!!", Toast.LENGTH_LONG).show();
        }
    });


}

这样试试

SharedPreferences pref = mContext.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
Editor editor = pref.edit();
editor.clear();
editor.commit();

既然您已经提到您不想从共享首选项中删除登录值,而是每次只要求登录页面,我相信您正在寻找您想要以编程方式清除应用程序缓存的东西。

请检查,Clear Cache in Android Application programmatically and Clear Application's Data Programmatically

这个精彩的回答也值得一读 - Don't delete database or shared Preference on clear app

这是方法

 private void removePreference(Context context, String prefsName, String key) {
    SharedPreferences preferences = context.getSharedPreferences(prefsName, Activity.MODE_PRIVATE);
    android.content.SharedPreferences.Editor editor = preferences.edit();
    editor.remove(key);
    editor.apply();
}

你可以这样称呼它:

public void removeUser() {
    removePreference(context, FILENAME, KEY_USER);
}

将它们全部删除 SharedPreferences.Editor.clear() 后跟 commit()