我正在尝试从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);
我可以从共享首选项添加和读取/获取数据,但无法从共享首选项中删除数据。
答案 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()
是同步的,它显示它是存储值还是失败,具有相应的返回值true
或false
,因此您可以在这两种情况下处理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");
}
}