Поэтому я пытаюсь передать объекты между действиями с помощью 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();