Jun*_*ned 21 xml android sharedpreferences
我正在尝试更新SharedPreferences的值,这是我的代码:
edit = PreferenceManager.getDefaultSharedPreferences(this).edit();
edit.putString(Settings.PREF_USERNAME+"",txtuser);
edit.putString(Settings.PREF_PASSWORD+"",txtpass);
edit.commit();"
Run Code Online (Sandbox Code Playgroud)
问题是当我访问这个值时,它没有返回更新的值,它给了我一个SharedPreferences的值.
但是当我在XML文件中确认数据时,数据就更新了.
重新启动我的应用程序后,我得到了更新的值.所以它需要我重新启动应用程序以获取更新的值.
那么,一旦它发生变化,如何获得这些更新的值?
提前致谢
这是我的整个代码:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
ctx=this;
status=PreferenceManager.getDefaultSharedPreferences(this).getString(Settings.PREF_STATUS, Settings.DEFAULT_STATUS);// get old value
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
on(ctx,true);// function will call and value is updated
}
}});
status=PreferenceManager.getDefaultSharedPreferences(this).getString(Settings.PREF_STATUS, Settings.DEFAULT_STATUS);// this should give me a updated value but gives old value
}
public static boolean on(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(Settings.PREF_ON, Settings.DEFAULT_ON);
}
public static void on(Context context,boolean on) {
if (on) Receiver.engine(context).isRegistered(); //
}
**********in reciver file***********
public void isRegistered ) {
Editor edit = PreferenceManager.getDefaultSharedPreferences(Receiver.mContext).edit();
edit.putString(Settings.PREF_STATUS+"","0");
edit.commit();
}
Run Code Online (Sandbox Code Playgroud)
waq*_*lam 68
而不是使用edit.commit();,你应该使用edit.apply();.Apply将立即更新首选项对象并异步保存新值,因此允许您读取最新值.
承诺()
将您的首选项更改从此编辑器返回到它正在编辑的SharedPreferences对象.这以原子方式执行请求的修改,替换SharedPreferences中当前的任何内容.
请注意,当两个编辑器同时修改首选项时,最后一个调用commit会获胜.
如果您不关心返回值并且您正在从应用程序的主线程中使用它,请考虑使用apply().
应用()
将您的首选项更改从此编辑器返回到它正在编辑的SharedPreferences对象.这以原子方式执行请求的修改,替换SharedPreferences中当前的任何内容.
请注意,当两个编辑者同时修改首选项时,最后一个编辑应用获胜.
与commit()同步地将其首选项写入持久存储,apply()会立即将其更改提交到内存中的SharedPreferences,但会启动异步提交到磁盘,并且不会通知您任何失败.如果此SharedPreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及提交本身.
由于SharedPreferences实例是进程中的单例,因此如果您已经忽略了返回值,则可以使用apply()替换commit()的任何实例.
您无需担心Android组件生命周期及其与apply()写入磁盘的交互.该框架确保在切换状态之前完成apply()的飞行中磁盘写入.
| 归档时间: |
|
| 查看次数: |
41940 次 |
| 最近记录: |