2016-06-08 12 views
9

All'avvio dell'applicazione, controllo i dettagli dell'utente corrente nel mio database Firebase (sto memorizzando il suo uid per quello).Firebase Android addListenerForSingleValueEvent a volte non restituisce dati

Allego addListenerForSingleValueEvent al riferimento dell'utente per leggere i suoi dati.

Il mio problema è che a volte, non restituisce alcun valore, né il successo né il fallimento.

Solo la cancellazione dei dati dell'applicazione lo risolve, ma ovviamente costringe l'utente a effettuare nuovamente il login.

Ho letto alcuni post in SO, ma non ho trovato alcuna soluzione.

Ecco il mio pezzo di codice:

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 domanda: stai usando l'autenticazione? Stai accedendo a più database nella stessa app (o hai già utilizzato la stessa app per accedere a un altro database)? –

+0

Sì, sto utilizzando l'autenticazione. Accedo solo a un database. A proposito, anche il riavvio del dispositivo non lo ha risolto. – Adi

+0

Questo problema è iniziato solo dopo aver iniziato a utilizzare il nuovo SDK. – Adi

risposta

5

La raccomandazione che ho visto per questo è di chiamare keepSynced(true) sull'oggetto Query.

+0

Ho lo stesso problema con addListenerForSingleValueEvent, è la prima volta in cui l'applicazione è stata avviata, la sua chiamata è corretta, ma la prossima volta che ritorna sull'applicazione, non si chiama alcun metodo di override. ho provato a fare il controllo e il suo lavoro ora. –

+0

ma in realtà c'è un problema con il nuovo SDK –

0

La mia ipotesi è user/:id non esiste. Controlla l'output dell'errore:

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

Ho avuto lo stesso problema per giorni e finalmente l'ho risolto.

Sembra che la mia chiave Api sia stata modificata! Ed è quello che impediva il ritorno di addListenerForSingleValueEvent()!
Passare a Firebase Console, aprire il progetto, fare clic sull'icona delle impostazioni gear icon e passare a Impostazioni di progetto. Lì vedrai Web API Key. Prendi questo e copialo nel tuo file google-services.json nella directory del tuo progetto. Ecco uno snippet del file:

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

Ecco fatto. Dopo aver sostituito il valore di "chiave_corrente" con la chiave di Firebase, è tornato a funzionare (in precedenza aveva qualche altra chiave che penso di aver generato a Google Console e ha funzionato per mesi.) Solo pochi giorni fa ha smesso di funzionare)

Problemi correlati