Mam taką strukturę ognioodporności:

enter image description here

Pierwszym użytkownikiem z ID {X0}} ma dwóch przyjaciół. Jak mogę zapytać FireBase, aby uzyskać zarówno e-maila pierwszych przyjaciółmi użytkowników?

0
Bartosz Czyżowski 15 luty 2017, 16:40

2 odpowiedzi

Najlepsza odpowiedź
final ArrayList<String> emails = new ArrayList<>();

    DatabaseReference dbref = FirebaseDatabase.getInstance().getReference().child("users").child(fuser.getUid()).child("friends");

    dbref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            GenericTypeIndicator<Map<String, String>> gti = new GenericTypeIndicator<Map<String, String>>() {};

           // this contains the friend's list
            Map<String,String> friends = dataSnapshot.getValue(gti);

            Iterator<String> iterator = friends.keySet().iterator();

            while (iterator.hasNext()){

                // now for each friend fetch the email
      FirebaseDatabase.getInstance().getReference().child("users").child(iterator.next())
                        .child("email").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        emails.add(dataSnapshot.getValue(String.class));
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

            }




        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Aby ten efektywny (zmniejszyć połączenie serwera) Spróbuj przechowywać e-mail z listą przyjaciół

2
Majeed Khan 15 luty 2017, 14:32

Powiedz, że masz ArrayList<String> o nazwie friends, który zawiera swój identyfikator FireBase. Wtedy możesz zrobić coś takiego:

ArrayList<String> friendsMails = new ArrayList<>();

final ProgressDialog progressDialog = new ProgressDialog(Activity.this);
progressDialog.setMessage("Getting emails...");
progressDialog.setIndeterminate(true);
progressDialog.show();

DatabaseReference usersDBRef = FirebaseDatabase.getInstance().getReference();
usersDBRef.addListenerForSingleValueEvent(new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
          String mail = String.valueOf(dataSnapshot.child("email").getValue(String.class));
          friendsMails.add(mail);
          if (friendsMails.size() == friends.size()){
              progressDialog.dismiss();
              //Do whatever you want with the list of mails
          }
   }

   @Override
   public void onCancelled(DatabaseError databaseError) {}
});

for(i = 0; i < friends.size(); i++){
    usersDBRef.child("users").child(friends.get(i));
}
0
Maximiliano Ambrosini 15 luty 2017, 14:22