2016-06-04 21 views
5

Google Firebase Realtime Veritabanı'nın yeni sürümünü kullanarak bir Android uygulaması yapıyorum. veri değiştiğiAndroid'de firebase'de etkinlik dinleyicileri kullanmadan değer alabilir miyim?

Ben ValueEventListener ve ChildEventListener ile benim verilerin alıyorum eklendi// silinmiş/taşınmış vb ..

Şimdi, bir sorun var.

Benim veridir:

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

ve ben "getName" adlı bir bir Düğmesi var.

Kullanıcı adı verisindeki "name" değerini getName düğmesini tıkladığımda almak istiyorum.

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

Mümkün mü? Dinleyici kullanmadan değer alabilir miyim?

Yardımlarınız için bekliyorum. Teşekkürler.

+0

Belki aradığınız [verileri okumak kez] (https://firebase.google.com/docs/database/android/retrieve-data#read_data_once) – Aladin

cevap

6

Evet, bunu addListenerForSingleValueEvent kullanarak yapabilirsiniz. Bu, değeri yalnızca ValueEventListener ve ChildEventListener'un aksine bir kez getirecektir. Yani bu gibi bir şey olacaktır kodunuzu aslında

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

değil gerçek bu size verileri değiştirmek her zaman değişecek ve muhtemelen oldukça işe yaramaz hangi faaliyetleri tüm arayacak ben bile bilmiyorum niye Bu şekilde yaptı .... zamanın waiste.

1

Tasks API framework bir göz atın:

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