A.java:在此类中存储共享prefreence。我使用下面的代码片段。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(A.this);
Editor edit = prefs.edit();
edit.putString("Key1", key);
edit.putString("Key2", secret);
edit.commit();
BroadCastReceiver.java:我想在重新启动手机时获取Key1,Key2的值。为此,我使用下面的代码片段。
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String a = prefs.getString("Key1", null);
String b = prefs.getString("Key2", null);
}
查询:
上下文是否存在此问题
输出
我得到空值。我尝试在其他Activity中运行此格式运行正常但在broadcastReceiver中获得了null
值。
如果我纠正错误而不是纠正我?
答案 0 :(得分:1)
看起来您可能使用两个不同的Context对象。 PreferenceManager.getDefaultSharedPreferences()调用返回给定Context的默认SharedPreferences。
使用应用程序上下文两者应解决您的问题。使用getApplicationContext()在活动中获取它,并使用context.getApplicationContext()在BroadcastReceiver中获取它。
此article概述了上下文差异。
更新:作为Triode条评论,最好使用Context.getSharedPreferences()。这总是返回一个实例。
答案 1 :(得分:0)
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences("Name of your preference",Context.MODE_PRIVATE);
获取共享首选项的对象
例如,
SharedPreferences sharedPreferences = context.getSharedPreferences(
"Demo",
Context.MODE_PRIVATE);
edit.putString("Key1", key);
edit.putString("Key2", secret);
edit.commit();
SharedPreferences sharedPreferences = context.getSharedPreferences(
"Demo",
Context.MODE_PRIVATE);
String a = prefs.getString("Key1", null);
String b = prefs.getString("Key2", null);