2016-06-01 28 views
9

Questa è la mia logica per l'aggiunta di una nuova persona nel database in tempo reale di Firebase. Ma invece di creare una nuova voce, è sufficiente aggiornare i vecchi dati con uno nuovo.Come aggiungere nuovi dati in firebase android

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()); 
     } 
    }); 

Cosa c'è di sbagliato qui? Qualcuno può aiutarmi su questo?

+0

Passare attraverso i nuovi documenti Firebase, si sta utilizzando il vecchio –

+0

API hanno un'occhiata a questo può essere che ti aiuta: -http: //stackoverflow.com/questions/37338409/rerofit-firebase/37338410#37338410 – sushildlh

+2

@VeereshCharantimath I nuovi documenti firebase non sono affatto utili. Questi documenti sono pensati per esperti di alto livello in Firebase, non sono per le persone che sono nuovi ad esso. –

risposta

23

Si utilizza sempre la stessa rif

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

Check the doc:

Utilizzando setValue() in questo modo sovrascrive i dati nella posizione specificata, comprese le eventuali nodi figli.

Nel tuo caso si sono imperative gli stessi dati per questo motivo.

È necessario utilizzare il metodo push() per generare un ID univoco ogni volta che un nuovo figlio viene aggiunto al riferimento Firebase specificato.

Person person = new Person(); 
//Adding values 
person.setName(name); 
person.setAddress(address); 
Firebase newRef = ref.child("Person").push(); 
newRef.setValue(person); 
+0

Grazie per la risposta. l'aggiunta di parti funziona ora come previsto. Potete per favore aiutarmi su quali modifiche dovrei apportare in onDataChange in modo che visualizzi tutte le persone aggiunte nel database. – user3559471

+0

È possibile utilizzare la callback onChildAdded() utilizzando ref.child ("Persona") come riferimento. –

0

Si sta facendo riferimento al figlio "Person" e impostando il valore (setValue()) ogni volta che si fa clic su buttonSave, che modifica solo quel figlio. Prova invece a utilizzare push().

0

È possibile aggiungere un nuovo bambino ai dati, come ad esempio:

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); 

l'UserID varia quando l'utente di registrazione è diverso, quindi, sarà sempre andare in un nuovo elenco di dati per un nuovo utente registrato nell'ID utente in Utenti.

Problemi correlati