tutorial tiempo real query para guardar datos datasnapshot consultas android firebase firebase-database

tiempo - guardar datos en firebase android



Fallo de la base de datos de Firebase SQLiteDatabaseLockedException (1)

Me da esta caída en algunos dispositivos, pero solo en Android 4.

Estoy en Firebase Android SDK 10.2.1 11.0.2. Se pospone la actualización a la última versión porque también obliga a la actualización de los Servicios de Google Play, y muchos usuarios continúan permaneciendo en versiones anteriores de GPS.

¿Alguien más está viendo este problema?

Actualización: Esto estaba funcionando antes. Los bloqueos comenzaron después de actualizar de Firebase SDK 9.4.0 a 10.2.1 y compileSdkVersion 23 a 25. El bloqueo solo ocurre en Android 4.4 (Kitkat 19)

Excepción actualizada :

Fatal Exception: java.lang.RuntimeException at com.google.android.gms.internal.mz.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:5292) at java.lang.reflect.Method.invokeNative(Method.java) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) at dalvik.system.NativeStart.main(NativeStart.java) Caused by o.kD: Failed to gain exclusive lock to Firebase Database''s offline persistence. This generally means you are using Firebase Database from multiple processes in your app. Keep in mind that multi-process Android apps execute the code in your Application class in all processes, so you may need to avoid initializing FirebaseDatabase in your Application class. If you are intentionally using Firebase Database from multiple processes, you can only enable offline persistence (i.e. call setPersistenceEnabled(true)) in one of them. at com.google.android.gms.internal.nb.zzN(Unknown Source) at com.google.android.gms.internal.nb.(Unknown Source) at com.google.android.gms.internal.mx.zza(Unknown Source) at com.google.android.gms.internal.qd.zzgQ(Unknown Source) at com.google.android.gms.internal.qu.zzHg(Unknown Source) at com.google.android.gms.internal.qu.zza(Unknown Source) at com.google.android.gms.internal.qv.run(Unknown Source) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:893) at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:638) at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:320) at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:294) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:215) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:829) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:814) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:709) at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1039) at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:256) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) at com.google.android.gms.internal.nb.zzN(Unknown Source) at com.google.android.gms.internal.nb.(Unknown Source) at com.google.android.gms.internal.mx.zza(Unknown Source) at com.google.android.gms.internal.qd.zzgQ(Unknown Source) at com.google.android.gms.internal.qu.zzHg(Unknown Source) at com.google.android.gms.internal.qu.zza(Unknown Source) at com.google.android.gms.internal.qv.run(Unknown Source) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841)

Tengo varios procesos en la aplicación, pero utilizando el siguiente código para abortar Application.onCreate para los subprocesos.

@Override public void onCreate() { super.onCreate(); if (FirebaseApp.getApps(this).isEmpty()) { // No firebase apps; we are in a non-main process return; } // Firebase init and other custom logic FirebaseDatabase.getInstance().setPersistenceEnabled(true); }


No hay SQLiteDatabaseLockedException en Firebase. Esta SQLiteDatabaseLockedException se genera cuando está utilizando una SQLite datos SQLite con Android y el motor de la base de datos no puede adquirir un bloqueo de base de datos que necesita hacer su trabajo.

Si el enunciado es un [COMPROMISO] u ocurre fuera de una transacción explícita, entonces puede volver a intentar el enunciado. Si el enunciado no es un [COMPROMISO] y ocurre dentro de una transacción explícita, entonces debe deshacer la transacción antes de continuar.

Editar: con la nueva edición de su rastro de pila detallado, veo cuál es el error. El error ocurre cuando configura setPersistenceEnabled(true) . Esto debe hacerse antes de hacer cualquier otra cosa con su objeto firebaseDatabase . Entonces, te recomiendo usando el siguiente código:

public class HelperClass { private static FirebaseDatabase firebaseDatabase; public static FirebaseDatabase getDatabase() { if (firebaseDatabase == null) { firebaseDatabase = FirebaseDatabase.getInstance(); firebaseDatabase.setPersistenceEnabled(true); } return firebaseDatabase; } }