Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase:活动启动后读取数据_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android Firebase:活动启动后读取数据

Android Firebase:活动启动后读取数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,加载活动后,是否有方法从Firebase读取数据。此时,我正在使用常规的valueEventListener,但为了使其正常工作,必须对数据库进行某种更改 mDatabaseReference.child("Users").child(mUser.getUid()). child("Posts").addValueEventListener(new ValueEventListener() { @Override

加载
活动
后,是否有方法从
Firebase
读取数据。此时,我正在使用常规的
valueEventListener
,但为了使其正常工作,必须对数据库进行某种更改

    mDatabaseReference.child("Users").child(mUser.getUid()).
                       child("Posts").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                arrayOfQuestionForms.clear();
                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    QuestionForm tempQuestionForm = postSnapshot.getValue(QuestionForm.class);
                    arrayOfQuestionForms.add(tempQuestionForm);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

我正在寻找的是一种不使用监听器从
Firebase
读取数据的方法。我看过其他类似的帖子,但我认为还没有明确的答案。

为此,我使用了不同类型的监听器——ChildEventListener。它有不同的@Override方法。onChildAdded方法在第一次调用时(即在活动开始时)返回节点的每个子节点

请注意-可能需要稍微更改对DB的引用(向后修剪一个层次级别),以指向父节点。如果您扩展了数据库结构的快照,我可以查看。 这里是更新的代码(很抱歉,有任何输入错误-我无法测试它,因为没有您的DB:)


为此,我使用了不同类型的监听器——ChildEventListener。它有不同的@Override方法。onChildAdded方法在第一次调用时(即在活动开始时)返回节点的每个子节点

请注意-可能需要稍微更改对DB的引用(向后修剪一个层次级别),以指向父节点。如果您扩展了数据库结构的快照,我可以查看。 这里是更新的代码(很抱歉,有任何输入错误-我无法测试它,因为没有您的DB:)


如果不使用侦听器,就无法从Firebase数据库读取数据。说到Firebase,一切都与听众有关。确实,在设置值时,我们只需要直接在引用上使用名为
setValue()
的方法。不幸的是,Firebase中没有任何方法,比如说
getValue()
,其作用方式与
setValue()
相同

要解决这个问题,我建议您使用

在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次


如果不使用侦听器,就无法从Firebase数据库读取数据。说到Firebase,一切都与听众有关。确实,在设置值时,我们只需要直接在引用上使用名为
setValue()
的方法。不幸的是,Firebase中没有任何方法,比如说
getValue()
,其作用方式与
setValue()
相同

要解决这个问题,我建议您使用

在此位置为数据中的单个更改添加侦听器。此侦听器将使用该位置的数据值触发一次

为了让它工作,必须对数据库进行某种更改

    mDatabaseReference.child("Users").child(mUser.getUid()).
                       child("Posts").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                arrayOfQuestionForms.clear();
                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    QuestionForm tempQuestionForm = postSnapshot.getValue(QuestionForm.class);
                    arrayOfQuestionForms.add(tempQuestionForm);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
这是不正确的,也是开发人员常见的困惑源

使用当前代码,Firebase将立即开始从服务器读取数据。一旦获得数据,它就会调用您的
onDataChange()

从:

此方法在连接侦听器时触发一次,每次数据(包括子项)更改时触发一次

为了让它工作,必须对数据库进行某种更改

    mDatabaseReference.child("Users").child(mUser.getUid()).
                       child("Posts").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                arrayOfQuestionForms.clear();
                for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                    QuestionForm tempQuestionForm = postSnapshot.getValue(QuestionForm.class);
                    arrayOfQuestionForms.add(tempQuestionForm);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
这是不正确的,也是开发人员常见的困惑源

使用当前代码,Firebase将立即开始从服务器读取数据。一旦获得数据,它就会调用您的
onDataChange()

从:

此方法在连接侦听器时触发一次,每次数据(包括子项)更改时触发一次


嗯,又是这样。我必须按下某个按钮才能加载数据。这不是自动的。。。对我来说,类似的代码是自动工作的——我一开始就从Firebase读取数据,并将其放在本地SQLite中,所以应用程序只能继续使用SQLite。。。你到底按了什么来加载数据?嗯,同样的方法。我必须按下某个按钮才能加载数据。这不是自动的。。。对我来说,类似的代码是自动工作的——我一开始就从Firebase读取数据,并将其放在本地SQLite中,所以应用程序只能继续使用SQLite。。。为了加载数据,你到底按了什么键?好吧,在这种情况下,有没有办法自动加载数据,因为现在我必须点击我的应用程序上的某个东西才能看到数据。你显示的侦听器应该会立即触发。如果不这样做的话,其他事情就出了问题。不幸的是,无法从您共享的代码中说出这是什么。我建议从一个固定路径开始阅读,看看是否可行,比如
mDatabaseReference.child(“PublicData”).addValueEventListener(…
)。如果可行,您知道问题出在位置(可能是UID).事实上你是对的。我扭曲了一些东西,现在它做了我想要做的事情。在这种情况下,有没有办法自动加载数据,因为现在我必须单击我应用程序上的某个东西才能看到数据。你显示的侦听器应该立即触发。如果没有,其他事情会出错。取消锁定r当然,无法从您共享的代码中说出这是什么。我建议您首先从固定路径中读取,看看是否有效,例如
mDatabaseReference.child(“PublicData”).addValueEventListener(…
。如果有效,您知道问题出在该位置(可能是UID).事实上你是对的。我扭曲了一些事情,现在它实现了我的初衷