Вы получаете null
, потому что вам не хватает ребенка, который является идентификатором пользователя.Чтобы решить эту проблему, измените следующую строку кода:
Query listpayment = mFirebaseDatabase.getReference("paymentIDs").orderByChild("date").startAt(fromdateinLong).endAt(todateinLong);
на
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query listpayment = mFirebaseDatabase.getReference()
.child("paymentIDs")
.child(uid)
.orderByChild("date")
.startAt(fromdateinLong).endAt(todateinLong);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String userId = ds.child("userId").getValue(String.class);
Log.d(TAG, userId);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
listpayment.addListenerForSingleValueEvent(valueEventListener);
Редактировать:
Согласно вашим комментариям,Вы должны знать, что, используя эту схему базы данных, вы не сможете получить все платежи от всех пользователей.В Firebase нет возможности использовать подстановочные знаки.Так что запрос вроде этого:
Query listpayment = mFirebaseDatabase.getReference()
.child("paymentIDs")
.child(?)
.orderByChild("date")
.startAt(fromdateinLong).endAt(todateinLong);
Не разрешен.Чтобы решить эту проблему, существует обходной путь, который подразумевает дублирование данных.Таким образом, вы должны создать еще один узел, в который вы должны добавить все платежи всех пользователей.Эта практика называется denormalization
и является обычной практикой, когда дело доходит до Firebase.Для лучшего понимания, я рекомендую вам посмотреть это видео, Денормализация нормальна с базой данных Firebase .
Также, когда вы дублируете данные, есть одна вещь, которую нужно иметь в виду,Точно так же, как вы добавляете данные, вы должны поддерживать их.Другими словами, если вы хотите обновить / обнаружить элемент, вы должны делать это в каждом месте, где он существует.
Так что, к сожалению, используя реальную структуру базы данных, вы не можете достичь того, чего хотите.