【发布时间】:2016-02-11 00:54:11
【问题描述】:
我成功地从我的mainActivity 中创建、保存和检索我的共享首选项,但我无法从我的服务中获取它...
由于某种原因,当我尝试从后台服务中检索它时,我的共享首选项为空...
我在 onCreate 中初始化了我的偏好:
contactsPrefs = getSharedPreferences("contactsPrefs", MODE_PRIVATE); //Making a shared preferences
在 onCreate 中保存值:
myEditor = contactsPrefs.edit();
Set<String> set = new HashSet<String>();
set.addAll(contactArrayList);
myEditor.clear(); //Clearing current values in shared pref
myEditor.putStringSet("contactSetKey", set); //Adding contacts
myEditor.commit();
一切正常,但是当我尝试从我的服务访问我的首选项时,我得到 null:
preferences = PreferenceManager.getDefaultSharedPreferences(c); //See edit at bottom for more info
if(preferences.getStringSet("contactSetKey", null) != null) {
contactArrayList.addAll(preferences.getStringSet("contactSetKey", null));
for (String number : contactArrayList) {
number.substring(number.indexOf("-") + 1); //Remove all characters before the hyphen from my string
Log.v(TAG, number);
}
}else{
Log.v(TAG, "Dagnabit it its null");
}
令我失望的是,我得到了日志Dagnabit it its null。为什么它是空的?我可以向您保证,它适用于我的主要活动,因为当我从我的共享偏好中访问它时,我能够显示我的共享偏好中的所有数据。所以我知道它不应该为空......但出于某种原因
谢谢,
鲁基尔
编辑:
我实际上使用内容观察器注册了一个音量监听器,并且我正在从那里访问首选项。这是在服务中:
mSettingsContentObserver = new volumeCheck(this, new Handler());
getApplicationContext().getContentResolver().registerContentObserver(android.provider.Settings.System.CONTENT_URI, true, mSettingsContentObserver);
这里是内容观察者:
public class volumeCheck extends ContentObserver {
public volumeCheck(Context c, Handler handler) {
super(handler); //Creates a new handler
context = c; //variable context, defined earlier, is set equal to c, context of service.
preferences = PreferenceManager.getDefaultSharedPreferences(c);
}
【问题讨论】:
-
我注意到在最后一段代码中,使用了 var
preferences而不是contactsPrefs。这是故意的吗? -
@flkes 是的,我已经更新了我的问题以显示我的偏好的实例化。 :)
-
@flkes 我在服务中使用
preferences = PreferenceManager.getDefaultSharedPreferences(c);。是这个问题吗? -
不,不确定。我只是想知道!尽管stackoverflow.com/questions/5950043/… 这个链接可能会有所帮助
-
是否需要添加
MODE_PRIVATE参数?
标签: java android arrays database string