Чтобы получить только лекарство, соответствующее конкретному пользователю, вам нужно дважды запросить базу данных. Один раз, чтобы получить идентификаторы лекарств, а второй, чтобы получить информацию о ваших лекарствах, как в следующих строках кода:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference medicationRef = rootRef.child("User").child("r3").child("medication");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String medicationKey = ds.getKey();
DatabaseReference medicationKeyRef = rootRef.child("Medication_plan").child(medicationKey);
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Medication medication = ds.getValue(Medication.class);
Log.d(TAG, medication.getMedicine());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
medicationKeyRef.addListenerForSingleValueEvent(eventListener);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
medicationRef.addListenerForSingleValueEvent(valueEventListener);
Вывод в logcat будет:
Aspirin
Paracetamol
Кроме того, вам также следует упростить узел User
, как показано в следующей схеме:
Firebase-root
|
--- User
|
--- R3
|
--- lastname: "Hirsch"
|
--- medication
| |
| --- 1234: true
| |
| --- assf12: true
|
--- name: "Rob"
Приведенный выше код также будет работать для этой структуры.