【问题标题】:SharedPreferences Clear/SaveSharedPreferences 清除/保存
【发布时间】:2013-03-06 16:53:51
【问题描述】:

我正在尝试做一个检查器,我想将一个值保存到 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
        }

问题

但是当我正在测试时,我看到它并没有清除偏好。是我做错了什么吗?

【问题讨论】:

    标签: android android-activity sharedpreferences


    【解决方案1】:

    要清除 SharedPreferences 使用这个

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

    希望这对您有所帮助。

    【讨论】:

    • 谢谢,这很有帮助,但是如何清除 sharedPreferences 的一部分?
    • 我知道可能会晚,但我建议您使用值“Context.MODE_PRIVATE”而不是“0”作为模式。
    • @EdisonSpencer 使用0Context.MODE_PRIVATE 的区别?
    • @August,您可以看到here 常量 Context.MODE_PRIVATE 的值是 0x0,但是,如果您使用它而不是在代码中硬编码 0,如果 Google 决定更改值稍后,您的代码将受到保护,无需更改并最终发布以修复错误。
    • 更改 editor.commit();与 editor.apply(); commit() 立即将其数据写入持久存储,而 apply() 将在后台处理它。
    【解决方案2】:

    您没有使用相同的首选项。花点时间阅读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);
    

    【讨论】:

      【解决方案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();
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以:

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

        【讨论】:

          【解决方案5】:

          删除所有偏好:

          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 立即将其数据写入持久存储,而 apply 将在后台处理它。 SharedPreferences sp = context.getSharedPreferences(SharedDBName, Context.MODE_PRIVATE);SharedPreferences.Editor edit = sp.edit();edit.clear();edit.apply();
          • GeneralFunctions 显示红色...未识别
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-08-30
          • 2014-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-22
          相关资源
          最近更新 更多