0
votes

Afficher les sous-children par l'utilisateur signé

Bonjour, je suis nouveau dans Firebase et j'ai besoin d'aide pour afficher les sous-children de Firebase qui contiennent le même utilisateur que l'utilisateur signé

Voici ma base de données Voici les utilisateurs et EDU1 Spectacle complet de l'utilisateur J'ai besoin d'afficher juste des sous-loisirs de l'utilisateur signé p>

et voici mon code Firebaseauth Fauth; P>

private DatabaseReference fNotesDatabase;
ArrayAdapter adapter;
ListView listView;
ArrayList<String> arraylist = new ArrayList<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_education);
    fAuth = FirebaseAuth.getInstance();
    listView = findViewById(R.id.listview);
    fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");


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

            for(DataSnapshot datas: dataSnapshot.getChildren()){
                String values = datas.getKey();
                arraylist.add(values);
                adapter = new ArrayAdapter(Education.this, android.R.layout.simple_list_item_single_choice, arraylist);
                listView.setAdapter(adapter);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


7 commentaires

Quelles sont les données exactes que vous souhaitez afficher dans votre liste de réception?


Donc, dans le cas de y5o ... , vous souhaitez répertorier qui contiendra un seul enregistrement de type chaîne nommée EDU1 ?


Je veux afficher juste des sous-children contenant le même identifiant que l'utilisateur actuel connecté


Oui alex je veux juste un seul enregistrement ou quand il y aura plus de sous-children que 1 alors tout où est ce même identifiant d'utilisateur


Veuillez ajouter une capture d'écran du contenu de Y5O ... sur les deux endroits, notes et utilisateurs .


vérifier la mise à jour il y a image


Je vois qu'il y a un autre objet poussé à cet égard. Je pense que vous devriez reconsidérer votre schéma de base de données, il peut donc être interrogé en fonction de l'ID de l'utilisateur dont vous avez besoin.


3 Réponses :


0
votes

Essayez ce qui suit:

    FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    String userId = currentFirebaseUser.getUid();
    fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");


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

            for(DataSnapshot datas: dataSnapshot.getChildren()){
                String values = datas.getKey();

               db = FirebaseDatabase.getInstance().getReference().child(values).orderByKey().equalTo(userId);
               db.addListenerForSingleValueEvent(new ValueEventListener(){
                   @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                   //get data
             }

                    @Override
                public void onCancelled(DatabaseError databaseError) {

                }
             });

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });


8 commentaires

Bonjour, il ne fonctionne pas son ne rien afficher dans votre code est dB comme requête ou comment vous définissez?


Lorsque je définis DB comme DatabaseReference, je reçois une erreur que "Types incompatibles requis: DtabaseRefence trouvée: Query"


Oui utiliser la requête à la place


toujours ne fonctionne toujours pas car il n'affiche aucun élément de listeView


Dans la deuxième Ondatachange, vous devriez ajouter des éléments à ListView


Oui, je l'ai fait j'ajouterais là-bas de cette "chaîne valse = datas.getkey (); arraylist.add (valeurs); adaptateur = nouveau arrayadapter (Education.Ce, android.r.layout.simple_list_item_single_choice, arraylist); listview.setadapter ( adaptateur);" est ce juste ?


Vous devez récupérer les valeurs à l'intérieur de l'ID utilisateur dans la deuxième Ondatachange


Je l'ai fait comme je l'ai dit dans la partie supérieure de la commode, il y a une partie du code que j'ai ajouté là-bas



2
votes

Pouvez-vous essayer ce code et voir s'il travaille avec vous:

FirebaseAuth mAuth = FirebaseAuth.getInstance();
 // get the current user-id to read data easly
String  currentUserId = mAuth.getCurrentUser().getUid();
DatabaseReference userRef = FirebaseDatabase.getInstance()             
   .getReference().child("notes").child("education");
 // get data to them
userRef.child(currentUserId).addValueEventListener(
            new ValueEventListener() {
   @Override
   public void onDataChange(DataSnapshot dataSnapshot) {
      if(dataSnapshot.exists()){
         for(DataSnapshot datas: dataSnapshot.getChildren()){
            String values = datas.getKey();
            arraylist.add(values);
            adapter = new ArrayAdapter(Education.this,
             android.R.layout.simple_list_item_single_choice, 
             arraylist);
            listView.setAdapter(adapter);

         }
      }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

        }
});


0 commentaires

0
votes

Vous semblez avoir une structure de données comme / éducation / notes / $ UID code>. Donc, pour simplement lire les notes de l'utilisateur actuellement signé, faites:

fNotesDatabase = FirebaseDatabase.getInstance().getReference().child("Notes").child("education");
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

fNotesDatabase.child(uid).addListenerForSingleValueEvent(new ValueEventListener(){
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        ...


2 commentaires

Ne travaille pas Frank car il a Edu1 ou EDU2 entre le noeud Education et le userid


Oh Darn, ça m'a raté. Cela nécessite en effet un indice inverse.