1

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

如果我选择错误的方式而不是纠正我?

4

2 回答 2

1

看起来您可能会使用两个不同的 Context 对象。PreferenceManager.getDefaultSharedPreferences()调用返回给定上下文的默认 SharedPreferences 。

对两者使用应用程序上下文应该可以解决您的问题。使用 getApplicationContext() 在活动中获取它,使用 context.getApplicationContext() 在 BroadcastReceiver 中获取它。

本文对上下文差异进行了很好的概述。


更新:正如Triode评论,最好使用Context.getSharedPreferences()。这总是返回一个实例。

于 2013-10-23T12:39:18.033 回答
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);
于 2013-10-23T12:51:13.497 回答