Я пытаюсь получить и отобразить прошлые платежи пользователя. Для этого я использовал Recycler-view, который берет информацию из массива и отображает все прошлые транзакции.

enter image description here

Из базы данных выше (в изображении) я хочу получить эти данные и сохранить их в массиве в следующем формате:

amount[]={"100","200"};             
rid[]={"123456",123456"};             
date_time[]={"16 Aug 2019 14:10:26","16 Aug 2019 14:12:26"};

Ниже приведен код для студии Android, где мне нужна помощь.

      FirebaseDatabase.getInstance().getReference().child("payments").child(firebaseAuth.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                //How to retrieve the data in above array format
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

0
Yash Pawse 16 Авг 2019 в 13:10

2 ответа

Лучший ответ

Вы можете использовать List:

List<String> amountList   = new ArrayList<>();
List<String> ridList      = new ArrayList<>();
List<String> dateTimeList = new ArrayList<>();     
FirebaseDatabase.getInstance().getReference().child("payments").child(firebaseAuth.getUid()).addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    for(DataSnapshot ds : dataSnapshot.getChildren()){
        String amount    = ds.child("amount").getValue(String.class);
        String rid       = ds.child("rid").getValue(String.class);
        String dateTime  = ds.child("date_time").getValue(String.class);
        amountList.add(amount);
        ridList.add(rid);
        dateTimeList.add(dateTime);
     }             
   }

   @Override
   public void onCancelled(@NonNull DatabaseError databaseError) {

    }
  });

Ваш databaseReference находится в узле uid, затем вы зацикливаетесь внутри uid и получаете значение каждого атрибута, затем вы можете добавить их в List.

1
Peter Haddad 16 Авг 2019 в 10:46
int count = (int) datasnapshot.getChildrenCount();
String amount[]=new String[count];             
....
// initialize other arrays

int i=0; //loop counter
for(Datasnapshot post: datasnapshot.getChildren){
 ...
 //iterate every value and insert into respective array
}

Я не вижу никакого способа в одном запросе Firebase, кроме этого, или вы можете использовать вместо него List <>.

1
Aziz 16 Авг 2019 в 10:48