Запрос Firebase Android для ближайших временных меток (и близких местоположений, если это возможно)

#java #android #firebase

#java #Android #firebase

Вопрос:

Я новичок в Firebase, и я реализовал его в своем приложении для Android, чувствительном к землетрясениям. Моя структура выглядит следующим образом

это

Итак, каждый раз, когда мое приложение обнаруживает землетрясение, оно делает запись в Firebase, как указано выше. Однако я хочу использовать данные с других устройств, чтобы определить, было ли землетрясение законным или нет. В частности, каждый раз, когда 1 устройство распознает одно, я хочу проверить firebase, если в последнюю минуту была еще одна запись с другого устройства (в идеале я хотел бы также проверить координаты, чтобы узнать, находится ли оно поблизости, но я увидел, что это сложнее выполнить, поэтому вы можетепропустите это). Есть идеи о том, как это возможно? По сути, я просто хочу проверить, существуют ли новые записи в течение 1 минуты после моей записи (я также мог бы сделать проверку через 1 минуту, на случай, если мое устройство первым обнаружило его).

Заранее большое спасибо.

Комментарии:

1. Что вы уже пробовали в коде?

2. В настоящее время я как бы застрял на этом. Я успешно вставил данные в firebase, и я подумал, что, возможно, onDataChange или с помощью onChildAdded что-то может помочь, но не уверен :/

Ответ №1:

Запросы к базе данных Firebase в реальном времени представляют собой многоступенчатый процесс:

  1. Упорядочите данные по определенному значению свойства.
  2. Определите начальный узел и / или конечный узел для возврата (иногда называемый срезом).
  3. Необязательно ограничивать количество возвращаемых узлов.

В Android это выглядело бы примерно так:

 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Earthquakes");
Query query = ref.orderByChild("timestamp").startAt("2020-11-03 18:12:00").endAt("2020-11-03 18:12:59").
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot quakeSnapshot: dataSnapshot.getChildren()) {
            Log.i("DB", quakeSnapshot.getKey());
            Log.i("DB", quakeSnapshot.child("eventType").getValue(String.class));
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}
  

Я настоятельно рекомендую прочитать документацию Firebase по чтению и запрашиванию данных и использовать Codelab для разработчиков Android.

Комментарии:

1. Извините, еще 1 вопрос. Если я хочу проверить значение пользователя в результатах, полученных запросом, как я могу это сделать?

2. Это будет: quakeSnapshot.child("user").getValue(String.class)