Как запустить запрос в firebase для получения объекта с текущей датой? - PullRequest
0 голосов
/ 12 апреля 2019

Я хочу получить только объект текущей даты. У меня есть структура JSON, как показано ниже в базе данных Firebase.

Попробовал, но ничего не показывал правильно:

Calendar now = Calendar.getInstance();
    int year = now.get(java.util.Calendar.YEAR);
    int month = now.get(java.util.Calendar.MONTH);
    int day = now.get(java.util.Calendar.DAY_OF_MONTH);

query = mDatabase.orderByKey().orderByChild("date").equalTo(now.toString());

Пример данных JSON в базе данных Firebase

"n4VB8b3Q7SfRrR8ezdaaUaLRHn93"(uid) : {       
"-LcGXirH22zeZvaFuOzA"(timestamp) : {
  "date" : {
    "date" : 12,
    "day" : 2,
    "hours" : 20,
    "minutes" : 4,
    "month" : 2,
    "seconds" : 0,
    "time" : 1552399440382,
    "timezoneOffset" : -360,
    "year" : 119
  },
  "id" : "-LcGXirH22zeZvaFuOzA",
  "name" : "Testing with year",
  "note" : "with year"
},
"-LcGcoUtkFRtP-ugp2kO" : {
  "date" : {
    "date" : 12,
    "day" : 2,
    "hours" : 20,
    "minutes" : 1,
    "month" : 2,
    "seconds" : 0,
    "time" : 1552399260794,
    "timezoneOffset" : -360,
    "year" : 119
  },
  "id" : "-LcGcoUtkFRtP-ugp2kO",
  "name" : "Testing for today",
  "note" : "Testing for today"
}

Я ожидаю, что выходные данные будут событиями только текущей даты.

1 Ответ

0 голосов
/ 12 апреля 2019

Запросы к базе данных Firebase могут упорядочивать / фильтровать только по одному свойству. Поскольку вы сохранили дату в трех отдельных свойствах, вы можете заказать / отфильтровать только одно из них.

Например, чтобы получить дочерние узлы с 2019 года, вы должны сделать:

query = mDatabase.orderByKey().orderByChild("date/year").equalTo(119);

Вы заметите, что приведенное выше использует "date/year" для упорядочивания / фильтрации во вложенном свойстве year.


Если вы хотите иметь возможность фильтрации по всей дате, вы должны хранить эту дату в одном свойстве в формате, подходящем для фильтрации. Наиболее распространенным форматом для этого является ISO-8601 , который будет отражать сегодняшнюю дату как:

"20190412"

или

"2019-04-12"

Оба из них имеют то преимущество, что они лексикографически сортируемы: упорядочивание дат в этом формате в виде строк приводит к тому, что они также располагаются в хронологическом порядке.

Для получения даты Java в формате ISO-8601 Вы используете SimpleDateFormat объект:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String nowAsISO = df.format(new Date());

Если вы сохраните вышеупомянутое значение, скажем, date/iso и захотите отфильтровать элементы с сегодняшнего или более позднего периода, вы должны сделать:

query = mDatabase.orderByKey().orderByChild("date/is").startAt("2019-04-12");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...