Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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
如何使用java/android一次性从Firebase读取数据?_Java_Android_Events_Listener_Firebase - Fatal编程技术网

如何使用java/android一次性从Firebase读取数据?

如何使用java/android一次性从Firebase读取数据?,java,android,events,listener,firebase,Java,Android,Events,Listener,Firebase,我试图在onCreate()事件中使用Java API从Android应用程序中的Firebase数据库读取数据。换句话说,我正在尽可能地做最简单的阅读,相当于 ref.once('value', function(snapshot) { }); …在Javascript API中。我试图使用addEventListenerForSingleValueEvent()方法,但它似乎希望我重写onDataChange()方法,这不是我想要的。我希望在程序执行达到这一行时,无论数据库事件如何,都能

我试图在onCreate()事件中使用Java API从Android应用程序中的Firebase数据库读取数据。换句话说,我正在尽可能地做最简单的阅读,相当于

ref.once('value', function(snapshot) {

});
…在Javascript API中。我试图使用addEventListenerForSingleValueEvent()方法,但它似乎希望我重写onDataChange()方法,这不是我想要的。我希望在程序执行达到这一行时,无论数据库事件如何,都能得到数据。这是我的(未完成的)功能

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.poll_table);    

        // First get the table layout
        tbl = (TableLayout) findViewById(R.id.pollsTable);

        // Now let's create the header
        TableRow tHead = createPollsTableHeader();

        // Add header to tableLayout
        tbl.addView(tHead, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        // Add all polls in ref as rows
        polls.addListenerForSingleValueEvent(new ValueEventListener() {
            // DON'T KNOW WHAT TO DO HERE

        }
    }
我甚至不认为这是正确的方法。我只是希望能够得到一个Datasnapshot,我可以通过它进行迭代并从中获取数据,比如

for (Datasnapshot child : datasnapshot) {
}

…就像我在Javaxcript API中使用
ref.once('value',函数(snapshot)
事件一样。

这是正确的方法,您走的是正确的道路。命名有点混乱(抱歉!)。如果执行addListenerForSingleValueEvent,则重写的onDataChange方法将使用DataSnapshot准确调用一次,正如您所希望的那样(就像“ref.once('value'…)”一样)

因此,您应该能够做到:

// Add all polls in ref as rows
polls.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot child : snapshot.getChildren()) {
            ...
        }
    }
}

我必须为(DataSnapshot-child:snapshot.getChildren())使用snapshot.getChildren(){@realgt-Oops,你说得对。更新了答案。谢谢!@MichaelLehenbauer你能通过从中获取数据来更新答案吗?@MichaelLehenbauer因此,如果你有两个相关的查询,例如从一个位置获取id并查询另一个集合以获取数据,那么我必须通过onDataC编写两个侦听器hange?嗨,我有一些类似的东西,到目前为止它还在工作,我只得到一次数据,但是如果我对数据进行更改(例如添加新元素)当我关闭应用程序并再次打开它时,我没有得到更新的数据。我确实有Internet连接,而且我确实将setPersistenceEnabled设置为true,因此它也可以脱机工作。如果有连接,我为什么不从后端获取信息?