Запрос Firebase startAt () - PullRequest
       8

Запрос Firebase startAt ()

0 голосов
/ 25 мая 2020

my database view

Я использую запрос, но у меня проблемы. Я хочу получить значение с 5-го по 10-е. Я пытаюсь использовать startAt (), запрос ничего не получает.

public void read(){

    Query query = FirebaseDatabase.getInstance().getReference("values").orderByChild("timestamp").startAt(5).endAt(10);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot data: dataSnapshot.getChildren()){
                Value upload = data.getValue(Value.class);
                mUploads.add(upload);
                adapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            Toast.makeText(MainActivity.this, "Loading Quote failed", Toast.LENGTH_SHORT).show();
        }
    });
}

1 Ответ

1 голос
/ 25 мая 2020

Tl; DR: запросы к базе данных Firebase основаны на курсоре, а не на смещении.

Когда вы вызываете startAt(), вы должны передать значение отметки времени, с которой вы хотите начать возвращать результаты. Вы не можете передать смещения, как вы пытаетесь сделать сейчас.


Текущий код:

FirebaseDatabase.getInstance()
    .getReference("values")
    .orderByChild("timestamp")
    .startAt(5)
    .endAt(10);

Сообщает базе данных:

  1. Найдите узел с именем values под root.
  2. Упорядочите каждый дочерний узел по его значению timestamp.
  3. Затем найдите дочерний узел со значением 5 и запустите возврат результатов оттуда.
  4. Прекратить возвращать результаты, как только будет найден дочерний узел со значением 10.

Как вы, вероятно, видите, это не даст вам никаких результатов, поскольку ни один из ваших дочерних узлов не имеет значения отметки времени от 5 до 10.


Как сказано: запросы Firebase основаны на курсоре, то есть они работают, зная что-то об узле, с которого нужно начать. В то время как многие базы данных разбивают на страницы смещения, Firebase этого не делает, и вам нужно знать значение метки времени узла, с которого нужно начать.

Например, если вы хотите начать с узла, который вы открыли в ваш снимок экрана, а затем вернуть следующие 5 результатов, вы должны:

FirebaseDatabase.getInstance()
    .getReference("values")
    .orderByChild("timestamp")
    .startAt(-1590413110563)
    .limitToFirst(5);
...