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 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) { } });
3 Réponses :
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) { } });
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
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) { } });
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) {
...
Ne travaille pas Frank car il a Edu1 code> ou
EDU2 code> entre le noeud code> Education code> et le
userid code>
Oh Darn, ça m'a raté. Cela nécessite en effet un indice inverse.
Quelles sont les données exactes que vous souhaitez afficher dans votre liste de réception?
Donc, dans le cas de
y5o ... code>, vous souhaitez répertorier qui contiendra un seul enregistrement de type chaîne nommée
EDU1 code>?
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 ... code> sur les deux endroits,
notes code> et
utilisateurs code>.
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.