gpt4 book ai didi

java - Android SharedPreferences onSharedPreferenceChanged 未触发

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:05 25 4
gpt4 key购买 nike

因此,我尝试使用共享首选项中的 onSharedPreferenceChanged 在 Activity 之间传递对象:

在一个 Activity 类中,我这样调用首选项:

 mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
mPrefs.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String s) {
getData();
}
});

public void getData(){
Gson gson = new Gson();
String json = mPrefs.getString("ListAnimals", "");
ArrayList<SpottedAnimal> animalList = gson.fromJson(json, ArrayList.class);
}

fireClient = new FirebaseClient(context:this, mPrefs);

然后在 FirebaseClient 上,我调用 singleValueEventListener 以从数据库获取所有数据。

 Query query = mDatabase.orderByChild("id");
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

for(DataSnapshot ds :dataSnapshot.getChildren()){
final DataSnapshot dataSnap = ds;
String id = dataSnap.child("id").getValue(String.class);
mStorageRef.child("picture_Thumb"+id).
getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
SpottedAnimal pet = dataSnap.getValue(SpottedAnimal.class);
pet.setPictureIDThumb(uri.toString());
animalList.add(pet);
saveList();
}
}

public void saveList(){
String listJson = gson.toJson(animalList);
prefsEditor.putString("ListAnimals", listJson);
prefsEditor.commit();
}

目前这主要是一个测试,我将使用 onChildEvent 但当从服务器提取所有数据时,它至少应该触发 onSharedPreferenceChanged 几次。

此外,在 FirebaseClient 构造函数中,我从 Activity 类中获取了 Prefs:

    this.mPrefs=mPrefs;
prefsEditor = mPrefs.edit();

最佳答案

您现在无法使用尚未加载的内容。换句话说,您不能简单地将 animalList 创建为全局变量并在 onDataChange() 方法之外使用它,因为由于此方法的异步行为,它始终为。这意味着当您尝试在该方法之外使用该列表时,数据尚未完成从数据库的加载,这就是无法访问的原因。解决此问题的一个快速解决方案是仅在 onDataChange() 方法中使用该列表,否则我建议您查看此 post 中我的答案的最后部分。 其中我解释了如何使用自定义回调来完成它。您还可以看看这个video 为了更好地理解。

关于java - Android SharedPreferences onSharedPreferenceChanged 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50241816/

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