gpt4 book ai didi

java - 为什么这个值是空的?

转载 作者:太空狗 更新时间:2023-10-29 14:51:01 24 4
gpt4 key购买 nike

我正在从我的 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();

一切都很顺利,但是当我尝试从我的服务访问我的首选项时,我得到空值:

    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。为什么它是空的?我可以向您保证它在我的主要 Activity 中有效,因为当我从我的共享偏好访问它时,我能够显示我的所有共享偏好数据。所以我知道它不应该为空......但它是出于某种原因

谢谢,

鲁契尔

编辑:

我实际上使用内容观察器注册了一个音量监听器,并且我正在从那里访问首选项。这是在服务中:

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

}

最佳答案

尝试使用应用程序上下文获取共享首选项引用,如下所示:

contactsPrefs = 
getApplicationContext().getSharedPreferences("contactsPrefs",
MODE_PRIVATE); //Making a shared preferences

注意:如果您仍然得到 null,则从服务的 onStart() 方法获取共享首选项,而不是在 onCreate() 中执行。

编辑:我测试了它的工作

public class MainActivity extends AppCompatActivity {

private SharedPreferences preferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Status","Success");
editor.apply();

getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true,
new VolumeCheck(this, new Handler()));
}
}



import android.content.Context;
import android.content.SharedPreferences;
import android.database.ContentObserver;
import android.os.Handler;
import android.preference.PreferenceManager;
import android.util.Log;


public class VolumeCheck extends ContentObserver {
private final SharedPreferences preferences;

private Context context;

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.getApplicationContext());
String status = preferences.getString("Status", "");
if(!status.equalsIgnoreCase(""))
{
// got the value read from shared preference
Log.i("Reading value", status);
}
}
}

关于java - 为什么这个值是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35328936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com