java - Android SharedPreferences onSharedPreferenceChanged 没有被触发
问题描述
所以我试图在共享首选项中使用 onSharedPreferenceChanged 在活动之间传递对象:
在一个活动课程中,我这样称呼首选项:
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 构造函数中,我从活动类中获取首选项:
this.mPrefs=mPrefs;
prefsEditor = mPrefs.edit();
解决方案
推荐阅读
- angular - 为什么在 Okta 中,SPA(使用 Angular 和 WebAPI 2.0 构建)不首选 SAML?
- delphi - 在 Delphi 中提取引号之间的文本
- python - TypeError:只能将str(不是“int”)连接到str
- javascript - 使用ajax提交表单时如何在while循环中摆脱相同的id
- angularjs - 从时区偏移或Angularjs中的日期获取时区
- java - 阅读在给定时间后收到的短信
- lotus-notes - 如何通过 lotusscript 代理保存 csv 文件
- c# - 在列表中的特定位置添加项目
- javascript - 放置事件时显示文本
- php - 使用 Laravel 连接到 SQL 服务器的 Azure Web 应用程序