web-dev-qa-db-fra.com

Comment ajouter de nouvelles données dans firebase android

C’est ma logique pour ajouter une nouvelle personne dans la base de données temps réel de Firebase. Mais au lieu de créer une nouvelle entrée, il ne fait que mettre à jour les anciennes données avec les nouvelles.

buttonSave.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {


            /*
            new Firebase(Config.FIREBASE_URL)
                    .Push()
                    .child("title")
                    .setValue(text.getText().toString());
            */

            Firebase ref = new Firebase(Config.FIREBASE_URL);
            String name = editTextName.getText().toString().trim();
            String address = editTextAddress.getText().toString().trim();

            //Creating Person object
            Person person = new Person();

            //Adding values
            person.setName(name);
            person.setAddress(address);
            ref.child("Person").setValue(person);

        }
    });


    new Firebase(Config.FIREBASE_URL).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot postSnapshot : snapshot.getChildren()) {
                //Getting the data from snapshot
                Person person = postSnapshot.getValue(Person.class);

                //Adding it to a string
                String string = "Name: "+person.getName()+"\nAddress: "+person.getAddress()+"\n\n";

                //Displaying it on textview
                textViewPersons.setText(string);
            }
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {
            System.out.println("The read failed: " + firebaseError.getMessage());
        }
    });

Qu'est-ce qui ne va pas ici? Quelqu'un peut-il m'aider à ce sujet?

11
user3559471

Vous utilisez toujours le même ref

 Person person = new Person();
 //Adding values
 person.setName(name);
 person.setAddress(address);
 ref.child("Person").setValue(person);

Vérifiez la doc :

L'utilisation de setValue () de cette manière écrase les données à l'emplacement spécifié, y compris les nœuds enfants. 

Dans votre cas, vous écrasez les mêmes données pour cette raison.

Vous devez utiliser la méthode Push() pour générer un ID unique chaque fois qu'un nouvel enfant est ajouté à la référence Firebase spécifiée.

 Person person = new Person();
 //Adding values
 person.setName(name);
 person.setAddress(address);
 DatabaseReference newRef = ref.child("Person").Push();
 newRef.setValue(person);
26

Vous pouvez ajouter un nouvel enfant à vos données, tel que:

mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
String userId = user.getUid();
Firebase rootRef = new Firebase(Config.USER_URL);
Firebase userRef = rootRef.child("Users");
Person newUser = new Person();
newUser.setFirstName(firstName);
newUser.setLastName(lastName);
userRef.child(userId).setValue(newUser);

Le userId varie lorsque l'utilisateur connecté est différent, par conséquent, vous accédez toujours à une nouvelle liste de données pour un nouvel utilisateur connecté dans le userId sous Utilisateurs.

1
Loyal Fine

Vous faites référence à l'enfant "Person" et définissez sa valeur (setValue()) chaque fois que vous cliquez sur buttonSave, qui ne modifie que cet enfant. Essayez d'utiliser Push () à la place.

0
AL.