【问题标题】:How to remove some key/value pair from SharedPreferences?如何从 SharedPreferences 中删除一些键/值对?
【发布时间】:2011-12-23 11:07:36
【问题描述】:

如何从 SharedPreferences 中删除一些键/值对?我已经把它从首选项中删除了。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:
    SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = mySPrefs.edit();
    editor.remove(key);
    editor.apply();
    

    这里的编辑器是sharedPreferences编辑器。

    【讨论】:

    • 这个答案的一个小补充。来自 android 文档:“如果您不关心返回值并且您在应用程序的主线程中使用它,请考虑改用 apply()。”
    • @silwar ,您为什么将 apply() 重新编辑回 commit() ?知道文档说要使用 apply() 除非我们想使用返回值,并且问题或答案都不适合这种情况
    【解决方案2】:
    SharedPreferences.Editor.remove(key) 
    commit();
    

    【讨论】:

    • 如果您不使用 remove 方法的返回值,而您正在应用程序的主线程中使用它,请考虑改用 apply()。
    【解决方案3】:

    请务必注意,除非您打算使用 commit() 调用的返回值做某事,否则绝对没有理由使用同步 commit() 调用而不是异步 apply() 调用.

    请记住,如果您从主/UI 线程调用它,UI 将被阻塞,直到 commit() 完成。这可能需要大约 100 毫秒,而申请大约需要 5 毫秒。这可能看起来不多,但如果在整个应用程序中不断进行,它肯定会加起来。

    所以,除非你打算做这样的事情,否则希望在一个单独的线程上:

    editor.remove(String key); 
    boolean success = editor.commit();
    if (!success) { 
        // do something 
    }
    

    你应该这样做:

    editor.remove(String key); 
    editor.apply();
    

    【讨论】:

    • 我一直在寻找关于何时使用提交与应用的良好(现实世界)解释。这清楚地说明了这一点。
    【解决方案4】:

    信息

    只需检查 sharedpref 类扩展为 Map 这就是为什么有 remove 方法

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    editor.remove(String key);
    editor.apply();
    

    这里的 editor 是 sharedPreferences 编辑器。

    【讨论】:

      【解决方案5】:

      这是我解决这个问题的方法。

      首先我创建了一个 SharedPreference 的实例

      SharedPreferences mobilePreference;
      

      然后我将这个 sharedPreference 用作

      mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
      

      这里的“in.bhartisoftwares.amit.allamitappsthree”是我的包名,我正在使用 Context.MODE_PRIVATE,因为我只想为这个包名操作这个共享首选项。

      然后我删除选中的sharedPreference(我的sharedPreference的key是mobileString)如下:

      mobilePreference.edit().remove("mobileString").commit();
      

      完整代码如下:

      SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
          mobilePreference.edit().remove("mobileString").commit();
      

      【讨论】:

        【解决方案6】:

        很简单:

        private SharedPreferences sharedPreferences() {
            return PreferenceManager.getDefaultSharedPreferences(mContext);
        }
        
        public void clearSharedPreferences() {
            sharedPreferences()
                    .edit()
                    .remove(SOME_KEY_1)
                    .remove(SOME_KEY_2)
                    .remove(SOME_KEY_3)
                    .apply();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-20
          • 2013-09-07
          • 2018-05-27
          • 1970-01-01
          • 2021-10-25
          • 2015-12-27
          • 1970-01-01
          相关资源
          最近更新 更多