Одной из моих подпрограмм в методе onCreate () моей основной деятельности является взаимодействие с базой данных Firebase для выполнения одной из трех вещей:
1) Если пользователь является вернувшимся пользователем, обновите все свои настройки в Firebase, сохраненные с помощью SharedPreferences, локально.
2) Если пользователь новый и у него нет данных, хранящихся в облаке (они никогда не загружали приложение), ничего не делайте.
3) Если пользователь новый, но настройки хранятся под его уникальным идентификатором профиля Facebook, загрузите их и примените их к экземпляру SharedPreferences.
Мне, должно быть, не хватает некоторого ключевого, возможно, базового, понимания того, как работает DataSnapshot, потому что я не могу заставить работать мой следующий код:
private void initializeFirebase(){
my_db = FirebaseDatabase.getInstance();
DatabaseReference my_ref = my_db.getReference();
Map<String, ?> values = sharedPreferences.getAll();
if (values.isEmpty()){
final String id = Profile.getCurrentProfile().getId();
my_ref = my_ref.child("userid");
my_ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.getKey().equals(id)){
data = (Map<String, Object>)dataSnapshot.getValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
else {
for (Map.Entry<String, ?> entry : values.entrySet()) {
my_ref.child("userid").child(Profile.getCurrentProfile().
getId()).child(entry.getKey()).setValue(entry);
}
}
}
data - это глобальная переменная Map, которая всегда равна нулю после выполнения getValue ().
Мое дерево JSON организовано следующим образом: root -> users -> userid -> каждое предпочтение является дочерним узлом для узла userid. Любая помощь будет оценена !!