【问题标题】:Uncaught exception in Firebase runloop (3.0.0) In my production Android app. Please report to support@firebase.comFirebase runloop (3.0.0) 中未捕获的异常在我的生产 Android 应用程序中。请向 support@firebase.com 报告
【发布时间】:2016-08-17 16:30:46
【问题描述】:

我知道 StackOverflow 中已经存在很多问题。但我没有发现任何这些解决了我的问题。

我的 Android 应用正在生产中,我几乎每天都会从我的用户那里收到此错误。

Fatal Exception: java.lang.RuntimeException: Uncaught exception in Firebase runloop (3.0.0). Please report to support@firebase.com
   at com.google.android.gms.internal.zzagf$1$1.run(Unknown Source)
   at android.os.Handler.handleCallback(Handler.java:815)
   at android.os.Handler.dispatchMessage(Handler.java:104)
   at android.os.Looper.loop(Looper.java:194)
   at android.app.ActivityThread.main(ActivityThread.java:5763)
   at java.lang.reflect.Method.invoke(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:372)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by java.util.ConcurrentModificationException
   at java.util.HashMap$HashIterator.remove(HashMap.java:805)
   at bvi.l(:com.google.android.gms.DynamiteModulesC:648)
   at bvi.a(:com.google.android.gms.DynamiteModulesC:388)
   at buw.a(:com.google.android.gms.DynamiteModulesC:82)
   at buw.a(:com.google.android.gms.DynamiteModulesC:4199)
   at bvz.b(:com.google.android.gms.DynamiteModulesC:226)
   at bvz.a(:com.google.android.gms.DynamiteModulesC:271)
   at bwg.run(:com.google.android.gms.DynamiteModulesC:1020)
   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:818)

这个问题真的很烦人,也可能导致我失去用户。

我的 build.gradle:

compile 'com.google.android.gms:play-services-auth:9.2.1'
compile 'com.google.firebase:firebase-database:9.2.1'
compile 'com.google.firebase:firebase-auth:9.2.1'
compile 'com.google.firebase:firebase-invites:9.2.1'
compile 'com.firebaseui:firebase-ui-database:0.4.0'

注意:我没有使用 Firebase 崩溃报告,因为它正在创建一个不同的进程,这也可能是导致此缺陷的原因。但不知道为什么我仍然得到这个缺陷。

我已经向 slack 社区询问过这个问题。似乎他们无法帮助我,因为代码被混淆了。

这是我的应用链接:2048 Live

【问题讨论】:

  • 你在你的应用中使用Transaction操作吗?
  • @Wilik,是的。我的应用程序中有很多地方喜欢或不喜欢游戏,赢得游戏或输掉游戏等。在这些情况下,我需要以前的服务器数据,操作和更新。所以交易。
  • 我已删除 Crashlytics 链接,因为这可能会导致问题因过于本地化或不独立而被关闭。我同意堆栈跟踪会很好 - 请将相关位作为格式化文本块粘贴到问题中。谢谢。
  • @ChandraSekhar 嗨,有什么更新吗?

标签: android firebase firebase-realtime-database runloop


【解决方案1】:

如果您使用事务方法,如果用户在前一个事务完成之前的短时间内重复点击按钮(创建多个事务请求),则会发生错误。

我有同样的问题,我在我的应用程序中的解决方案是如果操作可以在短时间内完成,则避免使用事务方法。

或者您可以禁用该按钮并在上一个事务完成时启用它或防止用户滥用该按钮。

private void onLikeButtonClicked() {
    likeButton.setEnabled(false);
    ref.runTransaction(new Transaction.Handler() {
        @Override
        public Transaction.Result doTransaction(MutableData mutableData) {
            // transaction operation 
            return Transaction.success(mutableData);
        }

        @Override
        public void onComplete(DatabaseError databaseError, boolean b,
                               DataSnapshot dataSnapshot) {
            likeButton.setEnabled(true);
        }
    });
}

希望你能理解我的解释,希望对你有帮助:)

【讨论】:

  • 已经处理好了。我的应用程序中还有其他情况,我必须多次进行交易。例如:当用户赢得挑战时,则应从各个帐户中添加和扣除一些奖励积分。我还需要更新获胜者的详细信息和获胜次数。所以它的代码中有近 4 笔交易,应该这样做。
  • 你能发布这些交易的简化代码吗?也许我们可以想出一个更好的方法来实现你想要的。并尝试将您的 firebase 库更新为 9.4.0,将 firebase-ui 更新为 0.4.4
  • 这也发生在 9.4.0
  • 同样发生在 9.6.1
【解决方案2】:

当您启用持久存储时会发生这种情况。看来他们还没有修复它。但是如果你禁用持久存储,你就不会再看到这个问题了。

//FirebaseDatabase.getInstance().setPersistenceEnabled(true);

注释掉这一行,它将起作用。它是由于本地存储的数据库损坏而发生的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    相关资源
    最近更新 更多