Подтвердить что ты не робот

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

Я пытаюсь использовать Java API для чтения данных из базы данных 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 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) в Javaxcript API.

4b9b3361

Ответ 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()) {
            ...
        }
    }
}