我知道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崩溃报告,因为它正在创建一个不同的流程,这也可能是导致此缺陷的原因。但不知道为什么我仍然会遇到这个缺陷。
我已经向松散的社区询问了这一点。似乎他们无法帮助我,因为代码被混淆了。
以下是我的应用链接:2048 Live
答案 0 :(得分: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);
}
});
}
我希望你理解我的解释,希望这会有所帮助:)
答案 1 :(得分:0)
启用持久存储时会发生这种情况。似乎他们还没有解决它。但是,如果禁用持久存储,则不会再次看到此问题。
//FirebaseDatabase.getInstance().setPersistenceEnabled(true);
注释掉这一行,它会起作用。它是由于本地存储了损坏的数据库而发生的。