2016-08-17 3 views
1

StackOverflowにはすでに多くの問題があることは知っています。しかし、私はこれらの問題を解決しなかった。Firebase runloop(3.0.0)でキャッチされない例外私の生産Androidアプリでは、

私のAndroidアプリは実稼働中で、私はこのエラーをほぼ毎日私のユーザーから受け取ります。

Fatal Exception: java.lang.RuntimeException: Uncaught exception in Firebase runloop (3.0.0). Please report to [email protected] 
    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

あなたのアプリでトランザクション操作を使用していますか? – Wilik

+0

@Wilik、はい。ゲームに好き嫌いをしたり、ゲームに勝ったり、ゲームを失うなど、アプリには多くの場所があります。このような場合は、以前のサーバーデータを操作して更新する必要があります。だからトランザクション。 –

+0

Crashlyticsリンクを削除しました。これは、質問がローカライズされているか、自己完結していないとして閉じられる可能性があるためです。私はスタックトレースが良いと思うことに同意します - 関連するビットをフォーマットされたテキストブロックとして質問に貼り付けてください。ありがとう。 – halfer

答えて

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); 
     } 
    }); 
} 

は、このことができます:)

+0

これはすでに処理されています。私のアプリでは、トランザクションを何回もやらなければならない状況もあります。たとえば、ユーザーがチャレンジに勝利した場合、いくつかの報酬ポイントが追加され、それぞれのアカウントから差し引かれる必要があります。また、私は勝者の詳細を更新し、カウントを獲得する必要があります。したがって、コード内のトランザクションはほぼ4回で済みます。 –

+0

これらの取引の簡略化されたコードを掲載することはできますか?おそらく、あなたが望むものを達成するためのより良い方法を考え出すことができます。また、firebaseライブラリを9.4.0に更新し、firebase-uiを0.4.4に更新しようとします。 – Wilik

+0

これはまた9.4.0で発生します。 – Makalele

0

あなたが永続ストレージを有効にすると、この問題が発生願っています。そして、彼らはまだそれを修正するようだ。しかし、永続ストレージを無効にすると、この問題は再び発生しません。

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

この行をコメントアウトすると機能します。これは、データベースがローカルに格納されているために発生します。

関連する問題