Firebase 数据库 - Firebase 数据库运行循环 (19.3.0) 中未捕获的异常

Posted

技术标签:

【中文标题】Firebase 数据库 - Firebase 数据库运行循环 (19.3.0) 中未捕获的异常【英文标题】:Firebase Database - Uncaught exception in Firebase Database runloop (19.3.0) 【发布时间】:2020-09-11 16:19:32 【问题描述】:

我在我的项目中遇到了这个问题,不知道要解决它。请帮帮我。

我的项目在(11.8.0)之前已经实现了firebase数据并且运行正常。我最近添加了 firebase crashlytics sdk(数据库更新到 19.3.0)并在以发布模式运行项目时崩溃(minifyEnable = true)。

我的 gradle 文件

implementation("com.google.firebase:firebase-core:17.4.1")
    implementation("com.google.firebase:firebase-analytics:17.2.3")
    implementation("com.google.firebase:firebase-messaging:20.1.7")
    implementation("com.google.firebase:firebase-database:19.3.0")
    implementation("com.google.firebase:firebase-auth:19.3.1")
    implementation("com.google.firebase:firebase-crashlytics:17.0.0")

我的代码

FirebaseDatabase database = FirebaseDatabase.getInstance();

        DatabaseReference dbRef = database.getReference("/mydbkey");
        dbRef.addValueEventListener(new ValueEventListener() 
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) 
               // Do my stuff
            

            @Override
            public void onCancelled(DatabaseError databaseError) 
                // Do my stuff
            
        );

崩溃的消息:

Fatal Exception: java.lang.RuntimeException: Uncaught exception in Firebase Database runloop (19.3.0). 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
       at com.google.firebase.database.android.AndroidPlatform$1$1.run(AndroidPlatform.java:96)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:201)
       at android.app.ActivityThread.main(ActivityThread.java:6820)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:922)
Caused by java.lang.NoSuchMethodError: No virtual method object()Lcom/***/android/am4; in class Lcom/***/android/am4; or its super classes (declaration of 'com.***.android.am4' appears in /data/app/com.***.debug-fG3zQ87gx1RUrYnvZ7rj7g==/base.apk!classes3.dex)
       at com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:69)
       at com.google.firebase.database.util.JsonMapper.serializeJsonValue(JsonMapper.java:58)
       at com.google.firebase.database.util.JsonMapper.serializeJson(JsonMapper.java:38)
       at com.google.firebase.database.connection.WebsocketConnection.send(WebsocketConnection.java:231)
       at com.google.firebase.database.connection.Connection.sendData(Connection.java:243)
       at com.google.firebase.database.connection.Connection.sendRequest(Connection.java:117)
       at com.google.firebase.database.connection.PersistentConnectionImpl.sendSensitive(PersistentConnectionImpl.java:1177)
       at com.google.firebase.database.connection.PersistentConnectionImpl.sendAction(PersistentConnectionImpl.java:1164)
       at com.google.firebase.database.connection.PersistentConnectionImpl.sendStats(PersistentConnectionImpl.java:1116)
       at com.google.firebase.database.connection.PersistentConnectionImpl.sendConnectStats(PersistentConnectionImpl.java:1159)
       at com.google.firebase.database.connection.PersistentConnectionImpl.onReady(PersistentConnectionImpl.java:310)
       at com.google.firebase.database.connection.Connection.onConnectionReady(Connection.java:217)
       at com.google.firebase.database.connection.Connection.onHandshake(Connection.java:210)
       at com.google.firebase.database.connection.Connection.onControlMessage(Connection.java:182)
       at com.google.firebase.database.connection.Connection.onMessage(Connection.java:132)
       at com.google.firebase.database.connection.WebsocketConnection.appendFrame(WebsocketConnection.java:256)
       at com.google.firebase.database.connection.WebsocketConnection.handleIncomingFrame(WebsocketConnection.java:303)
       at com.google.firebase.database.connection.WebsocketConnection.access$000(WebsocketConnection.java:34)
       at com.google.firebase.database.connection.WebsocketConnection$WSClientTubesock$2.run(WebsocketConnection.java:86)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at java.lang.Thread.run(Thread.java:764)

【问题讨论】:

我在我的应用程序中看到了相同的崩溃日志。你找到解决办法了吗? 【参考方案1】:

在我的情况下,将其添加到 proguard 规则中

-keep class org.json.* *;

【讨论】:

【参考方案2】:

我也遇到过这个问题。

minifyEnabled改成false后,一切正常。

【讨论】:

应该在哪里设置? 在您的应用级构建 gradle 上。 感谢@Jeremy,但是通过将 minifyEnable 设置为 false,这意味着我不在我的项目中使用 proguard,事实上,我需要它 经过长时间的搜索,我找到了最常用的答案。试试这个,如果你实现了这个禁用它。 FirebaseDatabase.getInstance().setPersistenceEnabled(true);【参考方案3】:

所以我有一个运行良好的应用程序,直到我不知道我做了什么。 寻找解决方案一段时间后的任何方法。我得到了修复。

实现 'com.google.firebase:firebase-database:19.0.0'

只需将 Firebase 数据库降级到 19.0.0

【讨论】:

【参考方案4】:

我希望您知道 minifyEnabled true 我们为什么使用它以及它将在我们的应用程序中做什么,您需要在您的项目中更改并添加一些 sniped 代码。

@Keep 放在您用于从 firebase 接收数据的数据类的顶部。

在您的 Proguard 文件中添加以下行

-keep class org.json.* *;

它对我有用。

【讨论】:

以上是关于Firebase 数据库 - Firebase 数据库运行循环 (19.3.0) 中未捕获的异常的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 实时数据库能否有效地循环浏览数十亿条帖子并由发布它们的用户检索?

如何限制firebase函数的实例数

新的 Firebase 数据导致 TableView 单元格闪烁 (Firebase/iOS/Swift)

在没有 Firebase 身份验证的情况下保护 Firebase 数据库

Firebase 数据库存储大小限制

多个用户的 Firebase 实时数据库身份验证