gpt4 book ai didi

android - SharedPreferences 读取旧值

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:02 25 4
gpt4 key购买 nike

我使用 SharedPreferences 在我的应用程序的不同 Activity 中写入和稍后读取值。它曾经工作正常,但最近它似乎没有被 sincronized。我的意思是,我写了一个值,但其他 Activity 仍然读取旧值。有时它可以正常工作。有什么想法吗?

编辑:这是示例代码:

首先,来自一个线程:

SharedPreferences prefs = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("ComandToDo", value);
editor.commit();
... some code later:
alarmmanager.set(AlarmManager.RTC_WAKEUP, Miliseconds, sender);

在报警接收器中:

SharedPreferences prefs = contexto.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);
int value = prefs.getInt("ComandToDo", -1);

问题来了,因为“值”不是线程中写入的值。

最佳答案

这是我遇到的情况以及我为解决它所做的工作。

我从 Activity 触发警报,在该警报的 Broadcast-Receiver 中我正在更新 Shared-Preferences,每次启动应用程序时都会读取它。

触发警报后,无论何时启动应用程序,它都会获取仅从该 Activity 设置的旧值。没有反射(reflect)来自 Broadcast-Receiver 的更改。

这里的技巧是将 Shared-Preferences 设置为 MODE_MULTI_PROCESS

一般我们使用MODE_PRIVATE,但是做如下:

SharedPreferences prefs = this.getSharedPreferences("Preferences", MODE_MULTI_PROCESS);

注意:在代码中更改模式后,建议清除应用程序的数据以避免调试时出现问题。

编辑:MODE_MULTI_PROCESS 需要最低 API 11

在 API 11 之前,我能想到的解决方法是创建一个包含 2 列 KEY 和 VALUE 的数据库。这可以从其他模块访问。

关于android - SharedPreferences 读取旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14128080/

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