SharedPreferences清除/保存

28

我正在尝试制作一个检查器,希望将某个值保存到SharedPreferences中。但是我不确定它是否有效。

我用以下方法保存值:

    SharedPreferences prefs = getSharedPreferences("PREFERENCE", MODE_PRIVATE);
    boolean firstrun = prefs.getBoolean("firstrun", true);

    db = openOrCreateDatabase("value.db", Context.MODE_PRIVATE, null); // optional CursorFactory

    if (firstrun) {
          SharedPreferences.Editor editor = prefs.edit();

          db.execSQL("CREATE TABLE startValue (ID Integer Primary Key, myValue Integer)");

          db.execSQL("INSERT INTO startValue (myValue) VALUES (2)"); 

          editor.putBoolean("firstrun", false);
          editor.apply();

           }

    // Save the state
    getSharedPreferences("PREFERENCE", MODE_PRIVATE)
        .edit()
        .putBoolean("firstrun", false)
        .commit();

清除另一个活动中的偏好设置方法如下:

     try{
            db = openOrCreateDatabase("value.db", Context.MODE_PRIVATE, null); // optional CursorFactory

            db.execSQL("DROP TABLE IF EXISTS startValue");
            db.close();

            SharedPreferences preferences = getPreferences(0);
            SharedPreferences.Editor editor = preferences.edit();

            editor.remove("firstrun");
            editor.clear();
            editor.commit();

            this.finish();
        }    
        catch(SQLException ex)
        {
        //catch error here
        }

问题

但当我进行测试时,发现它没有清除首选项。我做错了什么吗?

5个回答

89

要清除SharedPreferences,请使用以下方法

SharedPreferences preferences = getSharedPreferences("PREFERENCE", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.clear(); 
editor.commit();

希望这能帮助到您。


1
谢谢,这很有帮助。但是如何清除SharedPreferences的一部分? - alicanbatur
我知道可能有点晚了,但我建议您使用值为“Context.MODE_PRIVATE”作为模式,而不是“0”。 - Edison Spencer
@EdisonSpencer 使用 0Context.MODE_PRIVATE 有什么区别? - August
1
@August,你可以在这里看到,常量Context.MODE_PRIVATE的值为0x0。然而,如果你在代码中使用它而不是硬编码0,如果谷歌决定在以后的阶段更改该值,你的代码将受到保护,无需更改和最终发布修复错误。 - Edison Spencer
将 editor.commit(); 替换为 editor.apply(); commit() 会立即将数据写入持久存储,而 apply() 则会在后台处理它。 - Parth Patel

7
您没有使用相同的偏好设置。花点时间阅读 http://developer.android.com/reference/android/app/Activity.html。在您的第一个活动中,您正在使用:
SharedPreferences prefs = getSharedPreferences("PREFERENCE", MODE_PRIVATE);

在其他活动上的清除中,您只使用:



SharedPreferences preferences = getPreferences(0);

阅读文档:

获取一个SharedPreferences对象,用于访问此活动私有的偏好设置。这只是通过将此活动的类名作为偏好设置名称传递给基础的getSharedPreferences(String, int)方法来调用。

两个活动都需要使用相同的偏好设置名称。因此,在第二个活动中进行清除操作时,只需使用:

SharedPreferences preferences = getSharedPreferences("PREFERENCE", MODE_PRIVATE);

4

// 将字符串保存到SharedPreferences中

public static void saveStringToSharedPreferences(Context mContext, String key, String value) {
    if(mContext != null) {
        SharedPreferences mSharedPreferences = mContext.getSharedPreferences("SHARED_PREFERENCES", 0);
        if(mSharedPreferences != null)
            mSharedPreferences.edit().putString(key, value).commit();
    }
}

// 从SharedPreferences中读取字符串

public static String readStringFromSharedPreferences(Context mContext, String key) {
    if(mContext != null) {
        SharedPreferences mSharedPreferences = mContext.getSharedPreferences("SHARED_PREFERENCES", 0);
        if(mSharedPreferences != null)
            return mSharedPreferences.getString(key, null);
    }
    return null;
}

// 从SharedPreferences中删除

public static void removeFromSharedPreferences(Context mContext, String key) {
    if (mContext != null) {
        SharedPreferences mSharedPreferences = mContext.getSharedPreferences(Constants.SHARED_PREFERENCES_NAME, 0);
        if (mSharedPreferences != null)
            mSharedPreferences.edit().remove(key).commit();
    }
}

2

清除所有偏好设置:

SharedPreferences mPrefs_delete = context.getSharedPreferences(GeneralFunctions.SETTING_SINGLE_MASTER_CHILD, Context.MODE_PRIVATE);
SharedPreferences.Editor editor_delete = mPrefs_delete.edit();
editor_delete.clear().commit();

考虑使用apply()代替commit(),因为commit()会立即将数据写入持久存储,而apply()会在后台处理。SharedPreferences sp = context.getSharedPreferences(SharedDBName, Context.MODE_PRIVATE); SharedPreferences.Editor edit = sp.edit(); edit.clear(); edit.apply(); - snehal agrawal
通用功能显示为红色...它未被识别 - Sharon Joshi

2

简单来说,您可以:

getSharedPreferences("PREFERENCE", 0).edit().clear().commit();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接