Firebase Runloop(3.0.0)中与持久性和查询有关的未捕获异常 [英] Uncaught exception in Firebase runloop (3.0.0) related to persistence and queries

查看:68
本文介绍了Firebase Runloop(3.0.0)中与持久性和查询有关的未捕获异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经为这个例外苦苦挣扎了一段时间. Firebase组上的一个相关线程有点死了 https://groups .google.com/forum/#!topic/firebase-talk/iy0762S3KsU ,还有两个与SO相关的问题未得到解答: Firebase Runloop(3.0.0)中未捕获的异常.请报告给support@firebase.com

I'm struggling with this exception for a while already. A relevant thread on the firebase group is kind of dead https://groups.google.com/forum/#!topic/firebase-talk/iy0762S3KsU, also two related on SO are unanswered: Uncaught exception in Firebase runloop (3.0.0) and Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com

解决方法是关闭数据库持久性,但对于需要脱机功能的应用程序并非不可接受.

The workaround saying to switch off database persistence works, but it's not unacceptable for apps which require offline capability.

我准备了一个最小活动示例,该示例在我的环境中重现了异常.一切都归结为使用查询读取数据库.足以启动和终止(从Android Studio中终止,而不只是退出)活动3次(很奇怪),并且在第3次启动时,它将崩溃并出现以下一系列壮观的异常(查询越多,排队的异常就越多) ):

I've prepared a minimal activity example which reproduces the exception in my environment. It all comes down to reading the database with queries. It's enough to launch and terminate ("terminate" from Android Studio, not just quit) the activity 3 times (weird) and on the 3rd launch it will crash with the following spectacular series of exceptions (the more queries queued the more exceptions i think):

07-05 18:47:10.132 20291-20291/com.mypackage D/ChimeraFileApk: Classloading successful. Optimized code found.
07-05 18:47:10.154 20291-20381/com.mypackage E/RunLoop: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
                                                           java.lang.AssertionError: hardAssert failed: 
                                                               at com.google.android.gms.internal.zzaiv.zzb(Unknown Source)
                                                               at com.google.android.gms.internal.zzaiv.zzaN(Unknown Source)
                                                               at com.google.android.gms.internal.zzagh.zzb(Unknown Source)
                                                               at com.google.android.gms.internal.zzagh.<init>(Unknown Source)
                                                               at com.google.android.gms.internal.zzaga.<init>(Unknown Source)
                                                               at com.google.android.gms.internal.zzaga.<init>(Unknown Source)
                                                               at com.google.android.gms.internal.zzadp.zza(Unknown Source)
                                                               at com.google.android.gms.internal.zzaeu.zzic(Unknown Source)
                                                               at com.google.android.gms.internal.zzafc.zzRy(Unknown Source)
                                                               at com.google.android.gms.internal.zzafc.zza(Unknown Source)
                                                               at com.google.android.gms.internal.zzafc$1.run(Unknown Source)
                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                               at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                               at java.lang.Thread.run(Thread.java:818)
07-05 18:47:10.154 20291-20291/com.mypackage D/AndroidRuntime: Shutting down VM
07-05 18:47:10.155 20291-20291/com.mypackage E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.mypackage, PID: 20291
                                                                  java.lang.RuntimeException: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
                                                                      at com.google.android.gms.internal.zzadp$1$1.run(Unknown Source)
                                                                      at android.os.Handler.handleCallback(Handler.java:739)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                      at android.os.Looper.loop(Looper.java:148)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                                   Caused by: java.lang.AssertionError: hardAssert failed: 
                                                                      at com.google.android.gms.internal.zzaiv.zzb(Unknown Source)
                                                                      at com.google.android.gms.internal.zzaiv.zzaN(Unknown Source)
                                                                      at com.google.android.gms.internal.zzagh.zzb(Unknown Source)
                                                                      at com.google.android.gms.internal.zzagh.<init>(Unknown Source)
                                                                      at com.google.android.gms.internal.zzaga.<init>(Unknown Source)
                                                                      at com.google.android.gms.internal.zzaga.<init>(Unknown Source)
                                                                      at com.google.android.gms.internal.zzadp.zza(Unknown Source)
                                                                      at com.google.android.gms.internal.zzaeu.zzic(Unknown Source)
                                                                      at com.google.android.gms.internal.zzafc.zzRy(Unknown Source)
                                                                      at com.google.android.gms.internal.zzafc.zza(Unknown Source)
                                                                      at com.google.android.gms.internal.zzafc$1.run(Unknown Source)
                                                                      at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                                      at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                      at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
                                                                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                      at java.lang.Thread.run(Thread.java:818)
07-05 18:47:10.165 20291-20381/com.mypackage E/RunLoop: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
                                                           java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.google.android.gms.internal.zzafj.zzg(com.google.android.gms.internal.zzaew)' on a null object reference
                                                               at com.google.android.gms.internal.zzafc.zzf(Unknown Source)
                                                               at com.google.firebase.database.Query$3.run(Unknown Source)
                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                               at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                               at java.lang.Thread.run(Thread.java:818)
07-05 18:47:10.166 20291-20381/com.mypackage E/RunLoop: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
                                                           java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List com.google.android.gms.internal.zzafj.zzg(com.google.android.gms.internal.zzaew)' on a null object reference
                                                               at com.google.android.gms.internal.zzafc.zzf(Unknown Source)
                                                               at com.google.firebase.database.Query$3.run(Unknown Source)
                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                               at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                               at java.lang.Thread.run(Thread.java:818)
07-05 18:47:10.173 20291-20381/com.mypackage E/RunLoop: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
                                                           java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.internal.zzafg.zzg(com.google.android.gms.internal.zzafa, com.google.android.gms.internal.zzahu)' on a null object reference
                                                               at com.google.android.gms.internal.zzafc.zzb(Unknown Source)
                                                               at com.google.android.gms.internal.zzafc.zza(Unknown Source)
                                                               at com.google.android.gms.internal.zzafc.zzaO(Unknown Source)
                                                               at com.google.firebase.database.connection.idl.IPersistentConnectionImpl$3.zzaO(Unknown Source)
                                                               at com.google.firebase.database.connection.idl.zzi$zza.onTransact(Unknown Source)
                                                               at android.os.Binder.transact(Binder.java:387)
                                                               at alx.a(:com.google.android.gms.DynamiteModulesC:196)
                                                               at amb.a(:com.google.android.gms.DynamiteModulesC:330)
                                                               at akh.a(:com.google.android.gms.DynamiteModulesC:3591)
                                                               at amf.a(:com.google.android.gms.DynamiteModulesC:386)
                                                               at aln.onTransact(:com.google.android.gms.DynamiteModulesC:50)
                                                               at android.os.Binder.transact(Binder.java:387)
                                                               at com.google.firebase.database.connection.idl.zzf$zza$zza.zzhT(Unknown Source)
                                                               at com.google.firebase.database.connection.idl.IPersistentConnectionImpl$5$1.zzhT(Unknown Source)
                                                               at com.google.android.gms.internal.zzaeu$1$1.zzhT(Unknown Source)
                                                               at com.google.android.gms.internal.zzadn$1.onFailure(Unknown Source)
                                                               at com.google.android.gms.tasks.zzd$1.run(Unknown Source)
                                                               at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423)
                                                               at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                               at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:269)
                                                               at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                               at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                               at java.lang.Thread.run(Thread.java:818)
07-05 18:47:11.745 20291-20291/com.mypackage I/Process: Sending signal. PID: 20291 SIG: 9

崩溃是在获取对数据库的引用并完成持久性设置后的首次尝试读取.

The crash is on the first attempt to read after getting the reference to the database and setting persistence is done.

这里是活动:

public class TestRunloopException extends AppCompatActivity {

    private static final String TAG = "test";
    private Handler mHandler = new Handler();

    Runnable mReadScoresRunnable = new Runnable() {
        @Override
        public void run() {
            readScores();
            mHandler.postDelayed(mReadScoresRunnable, 5000);
        }
    };

    @Override
    protected void onStart() {
        super.onStart();
        mHandler.postDelayed(mReadScoresRunnable, 3000);
    }

    void readScores() {
        DatabaseReference scoresRef = getDatabase().getReference("scores");
       //it occurs even with a single query..
       //scoresRef.startAt(51).limitToFirst(3).addListenerForSingleValueEvent(new MyValueListener());
        scoresRef.endAt(50).limitToLast(4).addListenerForSingleValueEvent(new MyValueListener());
    }


    public static class MyValueListener implements ValueEventListener {
        @Override
        public void onDataChange(DataSnapshot data) {
            Log.d(TAG, "onDataChange: " + data.getValue());
        }

        @Override
        public void onCancelled(DatabaseError error) {
            Log.d(TAG, "onCancelled: " + error.getMessage());
        }
    }


    // access-wrapper, set persistence only once
    private static FirebaseDatabase mDatabase;
    public static FirebaseDatabase getDatabase() {
        if (mDatabase == null) {
            mDatabase = FirebaseDatabase.getInstance();
            mDatabase.setPersistenceEnabled(true);
        }
        return mDatabase;
    }

}

分数"节点没有特定的安全设置:"scores": { ".read": true, ".write": true } ...

The "scores" node has no particular security settings: "scores": { ".read": true, ".write": true } ...

在firebase-*:9.0.2上进行了测试,但在9.2.0中也发现了该错误.

Tested with firebase-*:9.0.2, but the bug has been also observed with 9.2.0.

如何避免在同一个引用/节点上使用多个查询并且当然具有持久性时发生崩溃?

How to avoid the crash while using multiple queries on the same reference/node and of course having persistence?

推荐答案

我遇到了同样的问题,我只是在build.gradle(应用程序模块)上修复了更新版本的firebase-core和firebase-database

I had the same problem, i just fixed updating a version of firebase-core and firebase-database on build.gradle (app module)

dependencies {
  ... 
  implementation 'com.google.firebase:firebase-core:17.1.0'
  implementation 'com.google.firebase:firebase-database:19.0.0'
}

您可以在 https://firebase.google上检查是否具有当前版本.com/support/release-notes/android

这篇关于Firebase Runloop(3.0.0)中与持久性和查询有关的未捕获异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆