2017-07-18 2 views
0

新しいセクションの障害とANRがAndroid Vitalsから収集された後、とfirebase databaseが有効になり、persistenceが有効になります。Firebaseデータベースで永続化を有効にすると、IllegalStateExceptionが発生する

public class Configuration extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     if(!FirebaseApp.getApps(this).isEmpty()) { 
      FirebaseDatabase.getInstance().setPersistenceEnable(true); 
     } 
    } 

} 

例外:

java.lang.RuntimeException: 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
    at android.app.ActivityThread.access$900(ActivityThread.java:157) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5530) 
    at java.lang.reflect.Method.invoke(Method.java:0) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:733) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623) 
Caused by: java.lang.IllegalStateException: 
    at com.google.firebase.FirebaseApp.getInstance(FirebaseApp.java:0) 
    at com.google.firebase.database.FirebaseDatabase.getInstance(FirebaseDatabase.java:0) 
    at <OR>.getInstance(FirebaseDatabase.java:0) 
    at <OR>.setPersistenceEnabled(FirebaseDatabase.java:0) 
    at <OR>.zziE(FirebaseDatabase.java:0) 
    at myapp.MyActivity.<init>(MyActivity.java:0) 
    at java.lang.Class.newInstance(Class.java:0) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1068) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2329) 

アップデート2018年2月3日

@FrankバンPuffelenの提案によると、私はこのanswerを作成したが、問題がまだ表示されます。

enter image description here

今日、アプリのバージョンに9:14 27 LGE LG K8(mm1v)、1536メガバイトのRAM、アンドロイド6.0 レポート1

java.lang.RuntimeException:  
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2339)  
    at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2494)  
    at android.app.ActivityThread.access$900 (ActivityThread.java:157)  
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1356)  
    at android.os.Handler.dispatchMessage (Handler.java:102)  
    at android.os.Looper.loop (Looper.java:148)  
    at android.app.ActivityThread.main (ActivityThread.java:5551)  
    at java.lang.reflect.Method.invoke (Method.java)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:731)  
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:621) 
Caused by: java.lang.IllegalStateException:  
    at com.google.firebase.FirebaseApp.getInstance (FirebaseApp.java)  
    at com.google.firebase.database.FirebaseDatabase.getInstance (FirebaseDatabase.java) 
    or      .setPersistenceEnabled (FirebaseDatabase.java) 
    or      .zzph (FirebaseDatabase.java)  
    at myapp.MyActivity.<init> (MyActivity.java)  
    at java.lang.Class.newInstance (Class.java)  
    at android.app.Instrumentation.newActivity (Instrumentation.java:1068)  
    at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2329)  
    at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2494)  
    at android.app.ActivityThread.access$900 (ActivityThread.java:157)  
    at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1356)  
    at android.os.Handler.dispatchMessage (Handler.java:102)  
    at android.os.Looper.loop (Looper.java:148)  
    at android.app.ActivityThread.main (ActivityThread.java:5551)  
    at java.lang.reflect.Method.invoke (Method.java)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:731) 
    at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:621) 
+2

を参照してください。[#15を動作していないFirebaseデータベースの永続](https://github.com/firebase/quickstart-android/issues/15) –

+0

のためにあなたのコードを検索します'setPersistenceEnable()'への他の呼び出し。クラッシュが 'Configuration.onCreate()'の呼び出しの結果であった場合、アプリケーションの作成に関連するスタックトレースの行が表示されることが予想されます(たとえば、 'android.app.Instrumentation.callApplicationOnCreate')。代わりに、システムが 'MyActivity'のインスタンスを作成しようとしていることを示唆する行があります。 –

+0

@ρяσѕρєяK - アプリケーションクラスからコードを削除し、ソリューションの提案コードを使用しましたが、問題は解決されませんでしたが、エラーログが生成されます。 – k4k4sh1

答えて

0

これを解決するには、コードを使用してください以下の下:

private static boolean calledAlready = false; 
if (!calledAlready) { 
    FirebaseDatabase.getInstance().setPersistenceEnabled(true); 
    calledAlready = true; 
} 

あなたのonCreate方法から最初のコードとして、このコードを使用する必要があります。この場合、setPersistenceEnabled()メソッドは、calledAlreadyブール値の存在のために以前に呼び出されなかった場合にのみ呼び出されます。

希望します。

+1

ほとんどの場合、問題はマルチプロセスアプリケーションによって引き起こされます。これは、@ρяσѕρєяKにリンクされているものです。この場合、静的ブール値は単一のプロセスインスタンスにリンクされているため、このコードは役に立ちません。あなたの主なアクティビティ(setPersistenceEnabled(true))を呼び出すだけでなく、コンテンツプロバイダがこれに対する唯一の適切な解決策です(複数回呼び出されますが、それは関係ありません)。 –

1
public class FirebaseContentProvider extends ContentProvider { 

    private static FirebaseDatabase mDatabase; 

    @Override 
    public boolean onCreate() { 

     if (mDatabase == null) { 
      mDatabase = FirebaseDatabase.getInstance(); 
      mDatabase.setPersistenceEnabled(true); 
     } 

     return true; 
    } 
} 

のAndroidManifest.xmlが

<application 
... > 
    <provider 
     android:name=".test.FirebaseContentProvider" 
     android:authorities="com.test.FirebaseContentProvider" 
     android:exported="false" /> 
</application> 
関連する問題