#java #android #firebase #firebase-realtime-database
#java #Android #firebase #firebase-realtime-database
Вопрос:
Вот моя база данных:
Я хочу получить данные из stats.20201104.nutrients.protein, которых должно быть 2.
Для всех других узлов над ним я смог довольно хорошо извлекать данные с помощью пользовательской настройки класса POJO. Кажется, я не могу найти способ получить значения даты, например, 20201104, в общем, в журнале выполнения указано следующее, что ожидается:
В классе com.example.nutrobud.ui.home не найден параметр / поле для 20201104.Статистика
Я знаю свой Stats.java класс настроен неправильно, как я могу настроить это так, чтобы я по-прежнему поддерживал ту же иерархию узлов БД?
Вот мой пользовательский класс из User.java:
public class User {
private String email;
private String password;
private String firstName;
private String secondName;
private int age;
private String gender;
private int weight;
private List<String> ingredientsNo;
private List<String> ingredientsYes;
private List<Integer> ingredientsYesGoalsQty;
private List<Integer> ingredientsYesTrackedQty;
private int calorieGoalsQty;
private int calorieTrackedQty;
private Stats stats;
//constructors
//basic getter and setters for all data members
}
Stats.java , тот же каталог, что и User.java:
public class Stats {
private int caloriesTracked;
private HashMap<String, Integer> nutrients;
//constructors
//basic getter and setters for all data members
}
Функция для чтения данных из базы данных в activity:
db.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot snapshot: dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);
//do something with user
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
Ответ №1:
Вы близки, но прямо сейчас у вас нет ничего в ваших POJOs, фиксирующих 20201104
то, что упоминается в сообщении об ошибке. Поскольку вы не можете знать фактические ключи, они должны быть map .
Поэтому я думаю, что ваш:
private Stats stats;
На самом деле должно быть:
private Map<String, Stats> stats;