2013-10-23 56 views
1

A.java:在这个类中存储共享的预览。我使用下面的代码片段。如何使用BroadcastReceiver重新启动手机后获取sharedPreference值?

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(A.this); 
Editor edit = prefs.edit(); 
edit.putString("Key1", key); 
edit.putString("Key2", secret); 
edit.commit(); 

BroadCastReceiver.java:我想获得密钥1,密钥2,当我重新启动我的电话的价值。为此,我使用下面的代码片段。

@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

在机器人的地方你确定你使用的是相同的情况下? – Triode

+0

我不这么认为bcz我在两个Activity中尝试并传递了类的上下文我在其中使用sharedPreferences,并且我得到了关键值@Triode –

+0

final SharedPreferences prefs = context.getSharedPreferences(APP_PREF_NAME,Context.MODE_PRIVATE);在所有的地方。只是一个建议,但不能确定你的代码有什么问题 – Triode

回答

1

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

使用应用程序上下文都应解决您的问题。使用getApplicationContext()在activity中获取它,并在使用context.getApplicationContext()的BroadcastReceiver中获取它。

这个article给出了上下文差异的很好的概述。


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

+0

lemme check这个...感谢 –

+0

注意,但是如果你使用不同的上下文对象来调用getSharedPreferences(),问题(可能)仍然存在。所以你仍然想在那里使用相同的上下文。 –

+0

如果这解决了您的问题,请将此标记为解决方案,以便其他人更容易找到。 –

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); 
相关问题