我的应用程序正在应用程序启动时调用一个服务。
在这个应用程序中,我正在更新给定的键值对的值。
SharedPreferences.Editor editor = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE).edit();
editor.putString("key",value);
editor.apply();我正试着从服务处拿来
SharedPreferences preferences = getSharedPreferences(getString(R.string.shared_preferences_name), MODE_PRIVATE);
String key = preferences.getString("key",null);但是服务总是显示旧的键值。也就是说,该值仅在应用程序启动或服务重新启动后才会反映出来。
如何在不重新启动服务或应用程序的情况下获取服务中的更新值?
如前所述,这里共享首选项不能跨多个进程工作。有其他选择吗?
发布于 2017-02-21 12:16:21
发布于 2016-12-30 12:30:25
您需要OnSharedPeferencesChangeListener来监听首选项的更新。它显示旧值的原因是因为它没有更新(代码行不被调用)。您需要触发事件来更新它。
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(
new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(
SharedPreferences prefs, String key) {
String key = prefs.getString("key",null);
}
});`编辑:您需要SharedPreferences.OnSharedPreferenceChangeListener对象的强引用。示例这里
发布于 2022-07-24 20:21:01
您必须添加
@Override
public void onResume(){
super.onResume();对于即时更新读取,提交();或apply ();在某些情况下可能不起作用,这种方法肯定会起作用。
下面的是我们的示例
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wi_fi);}
@Override
public void onResume(){
super.onResume();
SharedPreferences mPreferences =
PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mPreferences.edit();
String name = mPreferences.getString(getString(R.string.name), "");
editTextAddress.setText(name);
button1.setText(name);
}如果我有任何怀疑
https://stackoverflow.com/questions/41396222
复制相似问题