有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我试图在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', function(snapshot)事件一样


共 (1) 个答案

  1. # 1 楼答案

    这是正确的方法,你走在正确的轨道上。命名有点混乱(对不起!)。如果您执行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()) {
                ...
            }
        }
    }