Android设备Firebase Realtime Database二次进入页面崩溃求助
Android设备第二次进入Firebase Realtime Database页面崩溃
在Android设备上运行应用时,第二次进入使用Firebase Realtime Database的页面会发生崩溃,错误堆栈跟踪如下:
java.lang.RuntimeException: Uncaught exception in Firebase Database runloop (20.0.6). If you are not already on the latest version of the Firebase SDKs, try updating your dependencies. Should this problem persist, please file a report at https://github.com/firebase/firebase-android-sdk E/AndroidRuntime( 3934): at com.google.firebase.database.android.AndroidPlatform$1$1.run(AndroidPlatform.java:96) E/AndroidRuntime( 3934): at android.os.Handler.handleCallback(Handler.java:938) E/AndroidRuntime( 3934): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime( 3934): at android.os.Looper.loopOnce(Looper.java:210) E/AndroidRuntime( 3934): at android.os.Looper.loop(Looper.java:299) E/AndroidRuntime( 3934): at android.app.ActivityThread.main(ActivityThread.java:8168) E/AndroidRuntime( 3934): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime( 3934): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) E/AndroidRuntime( 3934): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1037) E/AndroidRuntime( 3934): Caused by: java.lang.RuntimeException: java.lang.AssertionError: hardAssert failed: listen() called twice for same QuerySpec. E/AndroidRuntime( 3934): at com.google.firebase.database.core.persistence.NoopPersistenceManager.runInTransaction(NoopPersistenceManager.java:131) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree.addEventRegistration(SyncTree.java:549) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree.keepSynced(SyncTree.java:857) E/AndroidRuntime( 3934): at com.google.firebase.database.core.Repo.keepSynced(Repo.java:772) E/AndroidRuntime( 3934): at com.google.firebase.database.core.Repo.keepSynced(Repo.java:767) E/AndroidRuntime( 3934): at com.google.firebase.database.Query$4.run(Query.java:267) E/AndroidRuntime( 3934): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:463) E/AndroidRuntime( 3934): at java.util.concurrent.FutureTask.run(FutureTask.java:264) E/AndroidRuntime( 3934): at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307) E/AndroidRuntime( 3934): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137) E/AndroidRuntime( 3934): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637) E/AndroidRuntime( 3934): at java.lang.Thread.run(Thread.java:1012) E/AndroidRuntime( 3934): Caused by: java.lang.AssertionError: hardAssert failed: listen() called twice for same QuerySpec. E/AndroidRuntime( 3934): at com.google.firebase.database.connection.ConnectionUtils.hardAssert(ConnectionUtils.java:67) E/AndroidRuntime( 3934): at com.google.firebase.database.connection.PersistentConnectionImpl.listen(PersistentConnectionImpl.java:391) E/AndroidRuntime( 3934): at com.google.firebase.database.core.Repo$5.startListening(Repo.java:206) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree.setupListener(SyncTree.java:918) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree.access$1000(SyncTree.java:79) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree$13.call(SyncTree.java:645) E/AndroidRuntime( 3934): at com.google.firebase.database.core.SyncTree$13.call(SyncTree.java:550) E/AndroidRuntime( 3934): at com.google.firebase.database.core.persistence.NoopPersistenceManager.runInTransaction(NoopPersistenceManager.java:126)
pubspec.yaml文件内容

Flutter doctor输出

问题分析与解决办法
从错误日志核心信息listen() called twice for same QuerySpec可知,同一查询规范被重复调用监听方法,常见原因及修复方案:
- 重复注册监听/保持同步:页面初始化时重复调用
keepSynced(true)或添加相同查询监听,第二次进入未清理旧监听就再次注册。
修复:在页面dispose方法中,移除对应查询监听或调用keepSynced(false)释放资源,确保每次进入仅初始化一次监听。 - SDK版本存在bug:当前使用Firebase Database SDK 20.0.6,可能存在已知问题。
修复:升级firebase_database依赖到最新稳定版,同步更新Android端Firebase SDK版本。 - 查询对象复用不当:多次复用同一Query对象添加监听,导致重复注册。
修复:每次进入页面创建新查询实例,或复用前检查并移除已有监听。
内容的提问来源于stack exchange,提问作者roil
相关产品推荐
相关产品推荐

