Come per oggi non esiste un concetto di timeout su quegli ascoltatori. Un'opzione è gestirla da solo.
Questo è il modo in cui lo faccio quando voglio anche visualizzare una finestra di dialogo durante il caricamento del contenuto.
private void showProgressDialog(boolean show, long time) {
try {
if (progressDialog != null) {
if (show) {
progressDialog.setMessage("Cargando...");
progressDialog.show();
new Handler().postDelayed(new Runnable() {
public void run() {
if(progressDialog!=null && progressDialog.isShowing()) {
progressDialog.dismiss();
Toast.makeText(ActPreguntas.this, "Couldn't connect, please try again later.", Toast.LENGTH_LONG).show();
}
}
}, time);
} else {
progressDialog.dismiss();
}
}
}catch(IllegalArgumentException e){
}catch(Exception e){
}
}
Quindi, quando si effettua una richiesta per Firebase si chiama showProgressDialog (vero, 5000) e dopo 5 secondi se gli alambicchi di dialogo non c'è perché non potrebbe collegarsi e poi fare quello che hai da come per il timeout .
Sul richiamo di chi ascolta Firebase si esegue questa operazione showProgressDialog (false, 0)
Speranza che aiuta.
Se si sta tentando di rilevare se l'utente è connesso al server Firebase, dare un'occhiata a ['.info/connected'] (https://www.firebase.com/docs/web/guide/offline -capabilities.html # sezione-connection-state). –
Stava affrontando lo stesso problema. Infine metti il timer intorno alla query per contrassegnarlo come timeout. L'intero processo è stato facile da fare utilizzando il framework Boltz per il mantenimento delle attività (BFTask), specialmente nel caso in cui si abbiano a che fare con più query. – Amit