我正在使用App Widget配置活动为我的小部件设置一些设置。当用户确认时,通过调用 saveWidgetConfig(Config)将设置保存到 Sharedpreferences 。稍后,当收到用于刷新小部件的广播时(第一个警报在1000毫秒之后),通过调用 loadWidgetConfig(id)再次加载配置。请参阅下面的简单实现。
现在的问题是即使我
调用editor.apply()(或commit() - 不做任何改动)
不要使用静态类=>每次我创建一个对象: 新的WidgetConfiguration(上下文)
尝试从我的接收器类访问SharedPreferences时,它不包含给定键的任何首选项。
BUT :
所以我认为它有不同的背景或者我会得到不同的版本"共享偏好。但到目前为止(超过三个小时!!!)我无法弄清楚......: - (
public class WidgetConfiguration {
private SharedPreferences prefs;
private String LOG_TAG = this.getClass().getSimpleName();
public WidgetConfiguration(Context context) {
prefs = PreferenceManager.getDefaultSharedPreferences(context);
}
public static String KEY_WIDGET_CONFIG = "single_widget_object_config_";
public void saveWidgetConfig(Widget widget) {
Gson gson = new Gson();
String json = gson.toJson(widget);
Editor editor = prefs.edit();
editor.putString(KEY_WIDGET_CONFIG + widget.getAppwidgetID(), json);
Log.d(LOG_TAG, "saved widget id " + widget.getAppwidgetID() + "\n" + json);
editor.apply();
};
public Widget loadWidgetConfig(int appwidgetID) {
Widget loadedWidget = null;
String key = KEY_WIDGET_CONFIG + appwidgetID;
if (prefs.contains(key))
{
String json = prefs.getString(key, null);
Log.d(LOG_TAG, "loaded widget id " + appwidgetID + "\n" + json);
Gson gson = new Gson();
loadedWidget = gson.fromJson(json, Widget.class);
}
else
{
Log.e(LOG_TAG, "no preferences found for widget: " + key);
}
return loadedWidget;
}
}
答案 0 :(得分:1)
把:
editor.commit();
而不是:
editor.apply();
答案 1 :(得分:0)
你保存它 “已保存的小部件ID”+ KEY_WIDGET_CONFIG + widget.getAppwidgetID()
并尝试使用其他密钥获取它 KEY_WIDGET_CONFIG + appwidgetID
使用相同的密钥来获取它