query guardar example datos consultas android firebase firebase-realtime-database persistence

example - guardar datos en firebase android



Firebase: ¿Cuál es la diferencia entre setPersistenceEnabled y keepSynced? (3)

De acuerdo con la documentación de Firebase

De manera predeterminada, el cliente Firebase mantendrá los datos en la memoria mientras se ejecuta la aplicación, pero no cuando se reinicie. Al establecer este valor en verdadero, los datos se conservarán en el almacenamiento en el dispositivo (disco) y, por lo tanto, estarán disponibles nuevamente cuando se reinicie la aplicación (incluso cuando no haya conectividad de red en ese momento). Tenga en cuenta que este método debe llamarse antes de crear su primera referencia de Firebase y solo debe llamarse una vez por aplicación. Si su aplicación usa Firebase Authentication, el cliente mantendrá automáticamente el token de autenticación del usuario en los reinicios, incluso sin la persistencia habilitada. Pero si el token de autenticación expiró mientras estaba desconectado y ha habilitado la persistencia, el cliente pausará las operaciones de escritura hasta que vuelva a autenticarse (o llame explícitamente a unauth) para evitar que sus escrituras se envíen sin autenticar y fallen debido a las reglas de seguridad.

Tenga en cuenta que dice que los datos persistirán en el disco y estarán disponibles cuando las aplicaciones se reinicien . Si observa el ciclo de vida de una Actividad , verá que una actividad se detiene cuando cambia a otra actividad. Por lo tanto, mientras su aplicación esté abierta y el usuario solo navegue a otras actividades, los datos permanecerán persistentes.

Pero no diga nada sobre matar su aplicación y persistir los datos. Es por eso que necesitas keepSynced() :

Al llamar a keepSynced (verdadero) en una ubicación, los datos de esa ubicación se descargarán automáticamente y se mantendrán sincronizados , incluso cuando no haya ningún oyente conectado a esa ubicación. Además, mientras una ubicación se mantiene sincronizada, no será expulsada del caché de disco persistente .

Preste atención cuando dice "mientras la ubicación se mantiene sincronizada, no será expulsada de la caché de disco persistente", esto significa que si no usa keepSynced(true) sus datos podrían ser eliminados cuando la aplicación se cierra / cierra .

Por lo tanto, para persistir y continuar con los datos después de que su aplicación sea eliminada, debe usar FirebaseDatabase.getInstance().setPersistenceEnabled(true); y keepSynced(true) .

Pensé que todo el tiempo cuando usara los siguientes datos para la conversación de chat estaría disponible sin conexión en cualquier momento. Lo que de alguna manera no lo es y todos los nodos se cargan desde el servidor.

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Entonces, de acuerdo con DOCS:

Comportamiento de persistencia: al habilitar la persistencia, cualquier dato que sincronicemos mientras esté en línea se conservará en el disco y estará disponible sin conexión, incluso cuando reiniciemos la aplicación. Esto significa que nuestra aplicación funcionará como lo haría en línea utilizando los datos locales almacenados en la memoria caché.

Si los datos ya estarán disponibles sin conexión cuando setPersistenceEnabled(true); , ¿por qué necesito keepSynced(true) ?

DatabaseReference r = FirebaseDatabase.getInstance().getReference("chat/roomid"); r.keepSynced(true);


El cliente de Firebase Database en su aplicación puede mantener los datos de la base de datos en dos lugares: en la memoria y / o en el disco.

  1. Cuando adjunta un oyente, sincroniza los datos de la base de datos con una representación en memoria en su aplicación.
  2. Si ha habilitado la persistencia, los datos también se conservan automáticamente en el disco.
  3. Cuando separa el último oyente de una ubicación, los datos de esa ubicación se eliminan de la memoria. Pero no se elimina del disco.

Cuando mantiene una ubicación sincronizada, el cliente esencialmente conecta un oyente vacío a esa ubicación. Por lo tanto, los datos en la aplicación siempre estarán actualizados con lo que hay en la base de datos en el servidor (siempre que haya una conexión de red). Si no ha habilitado la persistencia, los datos se mantendrán actualizados en la memoria. Si ha habilitado la persistencia, también se mantendrá actualizada en el disco.

Si bien es más común usar keepSynced con persistencia, también hay casos de uso sin persistencia.

Por ejemplo, si tiene una aplicación de detalles maestros, en la que frecuentemente rebota de una lista de nombres de elementos a los detalles de cada elemento. En ese caso, mantener la lista de nombres de elementos sincronizados le ahorrará tener que volver a cargar esos datos cuando el usuario regrese de la pantalla de detalles.

Por supuesto, también podría simplemente mantener un oyente en los datos, que es esencialmente lo que hace keepSynced detrás de escena.


setPersistanceEnabled (true) Almacenará los datos para su uso sin conexión.

mantiene sincronizado (verdadero) de forma predeterminada, Firebase mantiene los datos de 10 MB en caché, si crece más, lo reemplazará por nuevos datos. Para evitar lo mismo y mantener todos los datos sincronizados (verdadero), lo ayudará.