Как считывать данные из 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()) {
...
}
}
}