2 votes

Android : Vérifier la liste des données existantes dans la base de données Firebase ou non

J'essaie de créer une application qui sauvegarde ma liste de contacts dans la base de données Firebase. Je peux stocker tous les contacts dans la base de données, mais lorsque je sauvegarde de nouveaux numéros et que j'appuie à nouveau sur le bouton de synchronisation, cela repousse tous les contacts. J'ai la liste de mes contacts, maintenant je veux vérifier chaque contact s'il existe déjà dans la base de données Firebase ou non. S'il n'existe pas, il doit être inséré.

public void SyncNow(View view) {
    final DatabaseReference root = FirebaseDatabase.getInstance().getReference();

    for (i=0; i<storeContacts.size(); i++){
        UserContact contact = storeContacts.get(i);
        final String number = contact.getContactNumber();
        Query query = root.child("contactList").orderByChild("contactNumber").equalTo(number);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){
                    //do nothing
                }else {
                    String key = root.push().getKey();
                    root.child("ContactList").child(key).setValue(contact);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

}

Ce code ajoute seulement le dernier contact de mon UserContact ArrayList pour la taille de l'ArrayList. J'ai 108 contacts et il pousse le dernier contact 108 fois. Quelqu'un peut m'aider.

1voto

Alex Mamo Points 44420

Pour résoudre ce problème, vous devez effectuer un petit changement dans la structure de votre base de données en enregistrant ces chiffres comme dans la structure de base de données suivante :

Firebase-root
   |
   --- phoneNumbers
          |
          --- phoneNumberOne
          |       |
          |       --- //details
          |
          --- phoneNumberTwo
          |       |
          |       --- //details
          |
          --- phoneNumberThree
                  |
                  --- //details

Il est maintenant très simple de vérifier l'existence d'un numéro.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference phoneNumberToCheckRef = rootRef.child("phoneNumbers").child(phoneNumberToCheck");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(!dataSnapshot.exists()) {
            //Add number
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
phoneNumberToCheckRef.addListenerForSingleValueEvent(valueEventListener);

0voto

Android Team Points 7530

Vous avez utilisé pour chaque boucle alors je pense que tous les enregistrements seront ajoutés qui n'a pas de base de données firebase .

    for (UserContact contact:storeContacts){

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X