如何在使用BroadcastReceiver重启手机后获取sharedPreference值?

时间:2013-10-23 12:30:36

标签: java android sharedpreferences android-broadcast

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值。

如果我纠正错误而不是纠正我?

2 个答案:

答案 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);