Вы установили свою ссылку на:
lastlastref = myRef.child(babyid).child("baby_features").child("immunization_records");
Таким образом, каждый дочерний узел в этом месте является объектом JSON, подобным этому:
{
"date_time": "November/16/2018...",
"note": "hhjj...",
"vaccine": "Measles"
}
Но в вашем onChildAdded
вы пытаетесь получить одно строковое значение. Поскольку вышеупомянутый объект JSON не является строковым значением, getValue(String.class)
возвращает null
.
Чтобы получить значения, вы можете вызвать getValue()
для отдельных свойств:
lastlastref.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String date_time = dataSnapshot.child("date_time").getValue(String.class);
String note = dataSnapshot.child("note").getValue(String.class);
String vaccine = dataSnapshot.child("vaccine").getValue(String.class);
}
Вы также можете создать минимальный класс, чтобы обернуть каждую запись и прочитать ее. Простейшая версия этого:
public class ImmunizationRecord {
public String date_time;
public String note;
public String vaccine;
}
И тогда чтение будет сделано с:
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String record = dataSnapshot.getValue(ImmunizationRecord.class);
}
Небольшая заметка о том, как вы храните date_time
. Этот формат будет вызывать проблемы по мере вашего продвижения, так как он не сортируется. Если вам нужно хранить метки времени, храните их в миллисекундах с начала эпохи или в строковом формате, который позволяет их сортировать (например, 2018-11-16T11:29:00
).