2016-06-08 1 views
9

Wenn meine Anwendung gestartet wird, überprüfe ich die aktuellen Benutzerdetails in meiner Firebase-Datenbank (ich speichere die UID dafür).Firebase Android addListenerForSingleValueEvent gibt manchmal keine Daten zurück

Ich füge addListenerForSingleValueEvent zu Benutzerref an, um seine Daten zu lesen.

Mein Problem ist, dass es manchmal keinen Wert zurückgibt, weder Erfolg noch Misserfolg.

Nur das Löschen der Anwendungsdaten löst es, aber zwingt den Benutzer natürlich erneut zur Anmeldung.

Ich habe einige Beiträge bei SO gelesen, aber keine Lösung gefunden.

Hier ist mein Stück Code:

DatabaseReference newUser =  
FirebaseDatabase.getInstance().getReference("users/"+uid); 
newUser.addListenerForSingleValueEvent(new ValueEventListener()  
    @Override 
    public void onDataChange(DataSnapshot snapshot) {} 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Quick Frage: Verwenden Sie Authentifizierung? Greifen Sie auf mehrere Datenbanken in derselben App zu (oder haben Sie zuvor dieselbe App für den Zugriff auf eine andere Datenbank verwendet)? –

+0

Ja, ich verwende die Authentifizierung. Ich habe nur Zugriff auf eine Datenbank. BTW, sogar das Gerät neu starten hat es nicht gelöst. – Adi

+0

Dieses Problem hat erst begonnen, nachdem ich das neue SDK verwendet habe. – Adi

Antwort

5

Die Empfehlung, die ich für diese gesehen habe, ist keepSynced(true) auf dem Query Objekt aufzurufen.

+0

Ich habe das gleiche Problem mit addListenerForSingleValueEvent, ist das erste Mal, wenn Anwendung gestartet wurde, seinen Aufruf richtig, aber das nächste Mal, wenn ich wieder auf Anwendung komme, es keine Override-Methode aufrufen. Ich habe es versucht und jetzt funktioniert es. –

+0

Tatsache ist jedoch, dass es Probleme mit dem neuen SDK gibt –

0

Meine Schätzung ist user/:id existiert nicht. Überprüfen Sie Ihre Fehlerausgabe:

DatabaseReference newUser = FirebaseDatabase.getInstance() 
    .getReference("users") 
    .child(uid) 
    .addListenerForSingleValueEvent(new ValueEventListener()  
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (snapshot.exists()) { 
       Log.i(TAG, snapshot.val()); 
      } else { 
       Log.e(TAG, "Not found: " + uid); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e(TAG, databaseError.toString(); 
     } 
    }); 
-1

Ich habe das gleiche Problem seit Tagen und ich habe es endlich behoben.

Sieht aus wie mein Api-Schlüssel geändert wurde! Und das hat verhindert, dass addListenerForSingleValueEvent() zurückkam!
Gehen Sie zu Firebase Console, öffnen Sie Ihr Projekt, klicken Sie auf das Einstellungssymbol gear icon und gehen Sie zu Projekteinstellungen. Dort sehen Sie Web API Key. Nehmen Sie das und kopieren Sie es in Ihre google-services.json Datei in Ihrem Projektverzeichnis. Hier ist ein Ausschnitt aus dieser Datei:

... 
    ], 
    "api_key": [ 
    { 
     "current_key": "<COPY Web Api Key HERE>" 
    } 
    ], 
    ... 

Das ist es. Nach dem Ersetzen des Wertes von "current_key" durch den Schlüssel von Firebase, kehrte es an die Arbeit zurück (vorher hatte es einen anderen Schlüssel, den ich bei Google Console generiert hatte und es funktionierte für Monate. Vor ein paar Tagen hörte es auf)