Как считывать данные из Firebase один раз с помощью java/android?

Я пытаюсь использовать API Java для чтения данных из базы данных Firebase в приложении Android в событии onCreate (). Другими словами, Я пытаюсь сделать самое простое чтение возможным, эквивалент ...

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) {
}

..так же, как если бы я использовал ref.once('value', function(snapshot) событие в API Javaxcript.

1 ответов


это правильный метод, и вы на правильном пути. Название просто немного запутанное (извините!). Если вы делаете addListenerForSingleValueEvent, ваш переопределенный метод onDataChange будет вызываться ровно один раз с помощью DataSnapshot, как вы хотите (и так же, как "ref.один раз ('value'...)" будет делать.)

Так что вы должны быть в состоянии сделать:

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