2016-06-04 7 views
5

Sto creando un'applicazione Android utilizzando la nuova versione del database in tempo reale di Google Firebase.Posso ottenere un valore senza utilizzare gli ascoltatori di eventi in firebase su Android?

sto ottenendo i miei dati con ValueEventListener e ChildEventListener quando i dati modificati/aggiunti/eliminati/spostati ecc ..

Ora, ho un problema.

miei dati è:

"user 1": { 
    "name":"abc" 
} 

e ho un un pulsante che di nome "getName".

Desidero ottenere il valore di "nome" nei dati utente 1 quando ho fatto clic sul pulsante getName.

getName.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      bla bla.. 
     } 
    }); 

È possibile? Posso ottenere un valore senza usare gli ascoltatori?

sto aspettando il tuo aiuto. grazie.

+0

Forse siete alla ricerca di [leggere i dati una volta] (https://firebase.google.com/docs/database/android/retrieve-data#read_data_once) – Aladin

risposta

6

Sì, è possibile farlo utilizzando addListenerForSingleValueEvent. Questo recupererà il valore una sola volta a differenza di ValueEventListener e ChildEventListener. Così il vostro codice sarà simile a questa,

getName.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ref.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      // do some stuff once 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 
     } 
}); 
6
Non

effettivamente vero che cambierà ogni volta che si modificano i dati e sarà probabilmente chiamata tutte le vostre attività, che è abbastanza inutile io non so nemmeno il motivo per cui fatto in quel modo .... waiste of time.

1

Date un'occhiata a Tasks API framework:

@Override 
public void onClick(View view) { 
    getUser(); 
} 

private Task<User> getUser(String id) { 
    final TaskCompletionSource<User> tcs = new TaskCompletionSource(); 

    ref.child("users") 
     .child(id) 
     .addListenerForSingleValueEvent(new ValueEventListener() { 

      @Override 
      public void onCancelled(FirebaseError error) { 
       tcs.setException(error.toException()); 
      } 

      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       tcs.setResult(snapshot.getValue(User.class)); 
      } 

     }); 

    return tcs.getTask(); 
}