gpt4 book ai didi

android - Sharedpreferences 中的值仅在应用程序重新启动后可用

转载 作者:行者123 更新时间:2023-11-30 02:50:56 25 4
gpt4 key购买 nike

我正在使用 App Widget Configuration Activity 为我的小部件设置一些设置。当用户确认时,通过调用 saveWidgetConfig(Config) 将设置保存到 Sharedpreferences。稍后当收到刷新小部件的广播时(第一个警报在 1000 毫秒后),通过调用 loadWidgetConfig(id) 再次加载配置。请参阅下面的简单实现。

现在的问题是即使我

  • 调用 editor.apply()(或 commit() - 不改变任何东西)

  • 不要使用静态类 => 每次创建对象时:新的 WidgetConfiguration(上下文)

当尝试从我的接收器类访问 SharedPreferences 时,它不包含对给定键的任何偏好。

但是:

  • 如果我尝试在应用/提交后直接访问首选项,它会起作用——即使我创建了一个新的 WidgetConfiguration 类
  • 它在我重启设备或从 ecipse 运行新版本后也能正常工作

所以我认为它与不同的上下文有关,或者我得到了不同“版本”的 Sharedpreferences。但是到现在(三个多小时!!!)我还是想不通... :-(

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;
}

}

最佳答案

放:

editor.commit();

代替:

editor.apply();

关于android - Sharedpreferences 中的值仅在应用程序重新启动后可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24188217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com