2015-09-22 5 views
5

Uygulamamızın sohbet bileşeni için Android için Firebase kullanıyorum. Her sohbet mesajında ​​durum güncellemelerini güvenilir bir şekilde nasıl uygulayacağınızı bulmakta zorlanıyorum. Örneğin, sohbet sunucuyla senkronize edildiğinde "Gönderiliyor" u gösteriliyor ve senkronizasyondan sonra başarılı bir geri bildirim alıyor.Firebase Android - düğüm senkronize edilmişse nasıl söylenir

İletileri adaptörüme ileten bir onChildAdded dinleyicim var. Ancak, her bir düğüm yerel olarak eklendiğinde bu dinleyici hemen tetiklenir ve her düğümün durumunu denetleyemiyorum

Geçerli çözümüm düğüm anahtarları grubunu tutmak ve bir şeyi Firebase'e her bastığımda eklemek . Ardından setValue geri aramada, düğüm anahtarını setten kaldırırım. Ancak, bu düğümler, arama aktivitesi yok edildiğinde düğümler senkronize edilebildiğinden çok güvenilir değildir.

Her bir düğümün sunucuya senkronize edilip edilmediğini kontrol etmenin daha basit bir yolu olup olmadığını merak ediyorum.

Teşekkürler! Firebase documentation on writing data itibaren

+1

aşağıda cevap, ama bir dahaki sefere Sorunuzun sorunu yeniden minimal kodu ekleyin. Kod, kod açıklamalarından çok daha kolaydır. Bkz. Http://stackoverflow.com/help/mcve –

cevap

6

: Veri taahhüt edildiğinde bilmek isterseniz

, bir tamamlama dinleyici ekleyebilirsiniz. Hem setValue() hem de updateChildren(), yazma işlemi veritabanına bağlı olduğunda çağrılan isteğe bağlı bir tamamlama dinleyicisini alır. Bu kullanışlı kod örneği ile

:

ref.setValue("I'm writing data", new Firebase.CompletionListener() { 
    @Override 
    public void onComplete(FirebaseError firebaseError, Firebase firebase) { 
     if (firebaseError != null) { 
      System.out.println("Data could not be saved. " + firebaseError.getMessage()); 
     } else { 
      System.out.println("Data saved successfully."); 
     } 
    } 
}); 
+1

Evet, şu an kullandığım yöntem budur. Ancak ağım olmadığı durumda, ağ dinlendiğinde veriler sıraya alındığından, bu dinleyici hiç çağrılmıyor. Bu arada, bu geri bildirimi içeren etkinlik yok edilir. Ardından, ağı açarım, böylece yazılar biter. Sonra aktiviteye geri dönüyorum. Bu noktada veriler senkronize edilir, ancak geri çağırma asla yapılmaz. – recipherus

+0

Netleştirmek için, etkinlik kullanıcı tarafından kapatılırken, veriler arka planda senkronize edilir. Bu nedenle, bu geri bildirimi hiçbir zaman – recipherus

+1

alın. Uygulamanın aynı oturumunda dinleyiciler genellikle etrafta olacak ve çağrılacaklar. Disk kalıcılığını kullanır ve bir uygulama yeniden başlatırsanız, dinleyiciler gerçekten yeniden başlatılamazlar. –