2016-06-15 17 views
14

Nella mia app, sto utilizzando Firebase per il database. Ora, quando sto ascoltando qualsiasi cambiamento nei nodi figli di una particolare posizione, e se non c'è connessione a Internet, non viene attivato il callback. La chiamata a Firebase rimane bloccata.Firebase rimane bloccato su nessuna connessione INTERNET

Sto usando questo,

FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance(); 
firebaseDatabase.setPersistenceEnabled(true); 

Quindi, la persistenza è abilitato. Il problema si verifica solo uno scenario. Quando non ci sono dati sulla persistenza locale di Firebase e anche la connessione internet non è disponibile.

Sto usando questo,

addListenerForSingleValueEvent(new ValueEventListener() { 
         @Override 
         public void onDataChange(DataSnapshot dataSnapshot) { 

         } 

         @Override 
         public void onCancelled(DatabaseError databaseError) { 
          Timber.d("Cancelled"); 
         } 
        }); 

Non ricevo nessuna delle due callback per quel particolare scenario.

Cosa devo fare per affrontare questo tipo di scenario?

+0

In questo momento sto riscontrando lo stesso problema. Hai fatto qualcosa per risolverlo? In caso contrario, potrei dover ricorrere alla loro API REST. – Rafi

+0

Quale versione di SDK stai utilizzando per Firebase? –

+1

Ho risolto il problema utilizzando le informazioni ottenute da questa risposta: http://stackoverflow.com/questions/39021378/android-firebase-ondatachange-and-oncancelled-not-being-called-with-no-int/39021671 # 39021671 – Rafi

risposta

5

Vediamo come questi metodi vengono attivati ​​quando non v'è alcuna connettività:

onCancelled - quando c'è un errore del server-side. Ad esempio, quando l'utente non ha accesso al nodo specificato. (O quando si raggiunge il limite di connessione sul piano Sparkle).

onDataChange - se i dati persistono, leggerà questi dati. In caso contrario, questo metodo non verrà attivato (il tuo caso).

In base allo Firebase Documentation, Se si desidera verificare se il dispositivo è collegato al server Firebase, è possibile aggiungere un listener a .info/connected. In questo modo:

DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
connectedRef.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot snapshot) { 
    boolean connected = snapshot.getValue(Boolean.class); 
    if (connected) { 
     Toast.makeText(this, "Connected", Toask.LENGTH_SHORT); 
    } else { 
     Toast.makeText(this, "Not connected", Toask.LENGTH_SHORT).show(); 
    } 
    } 

    @Override 
    public void onCancelled(DatabaseError error) { 
    } 
}); 
+1

Mi chiedo da dove hai saputo che dobbiamo recuperare questo riferimento ".info/connected" per verificare lo stato della connessione. – Herry

+0

Ho aggiunto il link alla documentazione di Firebase alla mia risposta. @Herry –

+0

'connected' è false anche se Internet è disponibile – Shruti

Problemi correlati