2017-08-12 5 views
9

私はいくつかのデバイス上でこのクラッシュを取得していますが、唯一の私はFirebase AndroidのSDK 10.2.1 11.0.2によFirebaseデータベースクラッシュSQLiteDatabaseLockedException

アンドロイド4に。 Google Playサービスの更新も強制され、多くのユーザーは古いGPSバージョンを使用し続けるため、最新バージョンへの更新を延期します。

誰でもこの問題が発生していますか?

更新:これは以前より早く動作していました。クラッシュは、私は10.2.1にFirebase SDK 9.4.0からアップグレードした後に開始し、

更新例外25.クラッシュ唯一のAndroid 4.4(キットカット19)で発生するcompileSdkVersion 23:

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) 

私はアプリケーション内に複数のプロセスがありますが、次のコードを使用して、サブプロセスに対してApplication.onCreateを中止します。

@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); 
} 
+0

は 'multidex' –

+0

@IntelliJAmiyaを有効にし、あなたは説明してもらえますか?このクラッシュは私にとって繰り返すことはできません。私の唯一の選択肢は、本番環境でテストすることです。 –

答えて

4

FirebaseにSQLiteDatabaseLockedExceptionはありません。このSQLiteDatabaseLockedExceptionは、SQLiteデータベースをAndroidで使用していて、データベースエンジンがそのジョブを実行する必要があるデータベースロックを取得できない場合にスローされます。

文が[COMMIT]の場合、または明示的なトランザクションの外部で発生した場合は、文を再試行できます。文が[コミット]ではなく、明示的なトランザクション内で発生する場合、処理を続行する前にロールバックする必要があります。

編集:詳細なスタックトレースの新しい編集で、エラーの内容を確認します。 setPersistenceEnabled(true)を設定しているときにエラーが発生しています。これはあなたのfirebaseDatabaseオブジェクトで何か他のことをする前に行う必要があります。だから、私は次のコードを使用してrecomand:multidexがここでの問題である理由

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

実際にFirebaseデータベースからクラッシュが発生しています。私の質問で更新されるより詳細なスタックトレースを得ました。 –

+0

最新の回答をご覧ください。 –

+0

Firebaseデータベースの問題が確認されたので、私はもっと手がかりを持っています。これはコードの作業であり、Firebase SDK 9.4.0から10.2.1にアップグレードした後にクラッシュが始まりました。 Firebaseを11.0.2にアップグレードした後もクラッシュが続きました。 Google Playサービスも11.0.2になりました。 –