setPersistenceEnabled (true) bloquea la aplicación
Estoy creando mi primera aplicación Firebase. Uno de sus requisitos es que se ejecute cuando la red no esté disponible. La guía de Firebase dice:
Habilitar la persistencia del disco permite que nuestra aplicación también mantenga todo su estado incluso después de reiniciar la aplicación. Podemos habilitar la persistencia del disco con solo una línea de código.FirebaseDatabase.getInstance (). SetPersistenceEnabled (true); Con la persistencia del disco habilitada, nuestros datos y escrituras sincronizados se mantendrán en el disco a través de los reinicios de la aplicación y nuestra aplicación debería funcionar sin problemas en situaciones fuera de línea.
Otro requisito es usar Google Sign In. Entonces en miMainActivity
Compruebo si el usuario ha iniciado sesión, si no, inicio elSignInActivity
. (LosSignInActivity
es de los ejemplos de Firebase).SignInActivity
funciona, el usuario inicia sesión yMainActivity
se lanza por segunda vez. Ahora mi aplicación falla en la línea de códigoFirebaseDatabase.getInstance().setPersistenceEnabled(true);
con el siguiente mensaje:
Las llamadas a setPersistenceEnabled () deben realizarse antes de cualquier otro uso de la instancia de FirebaseDatabase.
Ahora si reinicio mi aplicación, el Usuario ha iniciado sesión, elSignInActivity
no se inicia, mi aplicación funciona bien.
¿Alguna sugerencia de cómo evito este bloqueo después de que el usuario inicie sesión?
Mientras publicaba esta pregunta, recibí una sugerencia para reubicarmeFirebaseDatabase.getInstance().setPersistenceEnabled(true);
a mi "clase de aplicación". Obtengo exactamente el mismo resultado ...SignInActivity
comienza, se completa y me cuelgosetPersistenceEnabled
.
A continuación se muestra mi actividad principalonCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
// Crash here upon returning from SignInActivity.
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
mFirebaseDbReference = FirebaseDatabase.getInstance().getReference();
// Initialize Firebase Auth
mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
if (mFirebaseUser == null) {
// Not signed in, launch the Sign In activity
Timber.tag("MainActivity").i("onCreate(): User not signed in, launching SignInActivity");
startActivity(new Intent(this, SignInActivity.class));
finish();
} else {
mUsername = mFirebaseUser.getDisplayName();
Timber.tag("MainActivity").i("onCreate(): User \"%s\" signed in.", mUsername);
if (mFirebaseUser.getPhotoUrl() != null) {
mPhotoUrl = mFirebaseUser.getPhotoUrl().toString();
}
}