2013-03-18 109 views
15

Iam试图做一个检查器,我想将一个值保存到SharedPreferences中。但是我'不知道,如果它的工作原理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(); 

并清除从另一个活动preferenece是:

 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 
     } 

问题

但是当我叫测试,因为我看到它没有清除偏好。我做错了什么?

回答

60

要清除SharedPreferences使用此

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

希望这有助于你。

+0

SharedPreferences喜好= getSharedPreferences( “偏爱”,0);我是否应该将“偏好”改为“头箍”或? – Tirolel 2013-03-18 11:23:32

+2

该代码将清除所有SharedPreferences。 – AwadKab 2013-03-18 11:26:57

+0

感谢这很有帮助,但是如何清除sharedPreferences的一部分? – alicanbatur 2014-03-28 07:54:15

6

您没有使用相同的参数。需要一段时间来阅读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); 
+0

这个解释我一直在寻找非常感谢,但AwadKab的解决方案为我工作。但是随着你的解释我明白AwaKabs代码。谢谢 – Tirolel 2013-03-18 11:29:31

+1

没问题,很高兴你解决了它。 – 2013-03-18 11:30:26

3

//保存字符串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(); 
    } 
} 
1

简单,您可以:

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

删除所有喜好:

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