持久的 Firebase 数据库在方向更改时崩溃

阿奇佩

我已经设置了一个实时 Firebase-Database 并且它与我正在构建的 android 应用程序进行通信而不会出现故障......直到我添加db.setPersistenceEnabled(true);db作为实例化的全局 FirebaseDatabase 变量)并进行方向更改。

在研究 StackOverflow 和文档时,我看到了一些通过使用 if 子句来确保代码不会重试持久化来解决这个问题的案例。但即使到位,应用程序也会崩溃。

我怀疑 ValueEventListener 以某种方式在其中发挥了作用。我试图在 onStart() 和 onStop() 中添加和删除侦听器,但这也没有防止崩溃。

这是我当前版本的代码(已删除所有上述试验,以免造成混淆):

    private FirebaseDatabase db;
    private DatabaseReference dbRef;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        db = FirebaseDatabase.getInstance();
            db.setPersistenceEnabled(true);
            isPersistenceEnabled = true;
        dbRef = db.getReference("meditations");
        dbRef.keepSynced(true);

        dbRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    meditations.clear();
                    List<String> keys = new ArrayList<>();

                    for (DataSnapshot keyNodes : dataSnapshot.getChildren()) {
                        keys.add(keyNodes.getKey());
                        Meditation meditation = keyNodes.getValue(Meditation.class);
                        meditations.add(meditation);
                        Log.v(getClass().getSimpleName(), "medtiation added");
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
    }

有没有人有这种情况的经验?我是否忽略了什么?

ETA:为全图添加堆栈跟踪(以防其他人有类似问题):

2

019-05-14 15:29:31.175 16705-16705/com.example.android.meditationhub E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.android.meditationhub, PID: 16705
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.meditationhub/com.example.android.meditationhub.ui.MainActivity}: com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4621)
        at android.app.ActivityThread.-wrap19(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6251)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
     Caused by: com.google.firebase.database.DatabaseException: Calls to setPersistenceEnabled() must be made before any other usage of FirebaseDatabase instance.
        at com.google.firebase.database.FirebaseDatabase.assertUnfrozen(com.google.firebase:firebase-database@@17.0.0:316)
        at com.google.firebase.database.FirebaseDatabase.setPersistenceEnabled(com.google.firebase:firebase-database@@17.0.0:284)
        at com.example.android.meditationhub.ui.MainActivity.onCreate(MainActivity.java:46)
        at android.app.Activity.performCreate(Activity.java:6725)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4621) 
        at android.app.ActivityThread.-wrap19(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:203) 
        at android.app.ActivityThread.main(ActivityThread.java:6251) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 

ETA2:我看到这已被标记为重复问题我已经查看了为链接问题提供的解决方案,但在我的情况下没有一个解决方案(如上所述)。

尼克·巴普

因为你需要告诉你的小部件在方向改变时保持原样。因此,您需要在<activity>inAndroidManifest.xml文件中添加一行

<activity
        android:name="NAME_OF_YOUR_ACTIVITY"
        android:configChanges="keyboardHidden|orientation|screenSize" />

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Firebase 数据库在值更改时重新打开活动

来自分类Dev

Firebase是否使用磁盘持久性对在设备上下载的数据库进行的查询收费?

来自分类Dev

Firebase数据库观察员的持久性如何?

来自分类Dev

Firebase 离线持久化

来自分类Dev

Angular Firebase 持久性从 Firestore 获取新数据

来自分类Dev

持久数据

来自分类Dev

Swift Firebase 持久性

来自分类Dev

在Firebase数据库中更改时触发iOS中的通知

来自分类Dev

Firebase 数据库侦听器仅在更改时获取值

来自分类Dev

使用 Swift 在 FireBase 数据库中发生更改时如何获取计数值?

来自分类Dev

Firebase 项目在数据库更改时在集合视图中多次返回

来自分类Dev

Firebase持久性,清除Firebase缓存

来自分类Dev

SQL数据库中的持久变量?

来自分类Dev

持久性Java数据库

来自分类Dev

单例数据库与持久数据库

来自分类Dev

Firebase:启用持久性后,如何将observeSingleEventOfType用于最新的服务器数据?

来自分类Dev

Firebase持久性如何为我的Android应用程序存储本地数据

来自分类Dev

NGXS使用运算符更新状态,然后将数据持久保存到Firebase

来自分类Dev

即使注销后,Firebase用户数据的持久性

来自分类Dev

注销后清除Firebase持久性

来自分类Dev

Express 中的 Firebase 会话持久性

来自分类Dev

使用 Firebase Javascript SDK 持久登录

来自分类Dev

iPhone中的持久数据

来自分类Dev

改造数据持久化

来自分类Dev

核心数据数据库持久存储位置是否已更改

来自分类Dev

内存数据库如何持久化数据

来自分类Dev

内存数据库如何持久化数据

来自分类Dev

JPA更改未持久存储在数据库中

来自分类Dev

Firebase数据库getInstance崩溃的应用程序

Related 相关文章

热门标签

归档