【发布时间】:2018-05-08 20:28:54
【问题描述】:
所以我尝试使用共享首选项中的 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 构造函数中,我还从活动类中获取了 Prefs:
this.mPrefs=mPrefs;
prefsEditor = mPrefs.edit();
【问题讨论】:
标签: java android firebase firebase-realtime-database sharedpreferences