SharedPreferences数据未删除

时间:2018-01-22 18:12:16

标签: android sharedpreferences

我正在尝试从android共享首选项中删除数据,但它没有删除。

这是我的代码 -

以共享偏好设置保存数据 -

stringr

从共享偏好中获取数据的代码 -

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
                SharedPreferences.Editor editor = sp.edit();
                editor.putString(PREFIX + mAppWidgetId, item.getId());
                editor.commit()

删除共享偏好的代码 -

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
        String id = sp.getString(ConfigurableWidgetActivity.PREFIX + appWidgetId, null);

我可以从共享首选项添加和读取/获取数据,但无法从共享首选项中删除数据。

2 个答案:

答案 0 :(得分:2)

您需要将请求链接在一起:

editor = sp.edit();
editor.remove(ids);
editor.apply()

或者你可以做一些谎言:

class ReactComp extend Component {
  const sayHello = () => {
      return 'Hello';
  }
  sayBye = () => {
      return 'Hello';
  }
  render() {
      <div>
        {this.sayHello}
        {this.sayBye}
      </div>
  }
}

答案 1 :(得分:0)

我在删除数据后会看到您使用apply()的代码,我建议使用commit()代替。请参阅此文档https://www.codeday.top/2017/07/26/31306.html

因此,commit()是同步的,它显示它是存储值还是失败,具有相应的返回值truefalse,因此您可以在这两种情况下处理UI和/或逻辑,而apply()是异步的,没有任何返回类型。也许您不知道apply()正在存储或不使用commit()

if (deletedWidgetIds.isEmpty()){
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
        sp.edit().clear();
        boolean isCleared = sp.edit().commit();

        if(isCleared)
           Log.d(TAG, "Cleared");
        else
           Log.d(TAG, "Not Cleared");

    } else {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
        for (String ids : deletedWidgetIds) {
            sp.edit().remove(ids);

        boolean isCleared = sp.edit().commit();

        if(isCleared)
           Log.d(TAG, "Cleared");
        else
           Log.d(TAG, "Not Cleared");
        }
    }