Запрос базы данных Firebase RealTimeDatabase выдает снимок без значений

#java #android #firebase #firebase-realtime-database

#java #Android #firebase #firebase-realtime-database

Вопрос:

У меня проблема с запросом, я хочу получить данные между первым днем недели и последним, и для этого я преобразовал даты в миллисекунды. Но в снимке нет значений. Кто-нибудь знает, что я сделал не так?

Я проверил, и между двумя датами (первой и последней) есть как минимум одна миллисекунда. Миллисекунды были сохранены как двойные.

Я опубликовал часть своего кода ниже и базу данных.

 referenceIncome = database.getReference("/users");
 
 double firstDateWeek = firstDate.get(Integer.parseInt(current));
double endDateWeek = endDate.get(Integer.parseInt(current));

Query query = referenceIncome.child(userID).child("Money").orderByChild("millisecond").startAt(firstDateWeek).endAt(endDateWeek);

query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {

 

 {
  "users" : {
    "8ps1o0nA95bRr1aMKDwnXQEoZxA3" : {
      "Money" : {
        "17-01-2021" : {
          "-MRG-KinX5n6_MflOqm8" : {
            "date" : "17-01-2021",
            "id" : "-MRG-KinX5n6_MflOqm8",
            "millisecond" : 1610898037725,
            "money" : 800,
            "spendOrEarn" : "Expenses",
            "type" : "groceries"
          },
          "-MRGX-Qhm2383hNRTKc6" : {
            "date" : "17-01-2021",
            "id" : "-MRGX-Qhm2383hNRTKc6",
            "millisecond" : 1610906863156,
            "money" : 77,
            "spendOrEarn" : "Expenses",
            "type" : "groceries"
          },
          "-MRGX1cG87WLK-KcaKl-" : {
            "date" : "17-01-2021",
            "id" : "-MRGX1cG87WLK-KcaKl-",
            "millisecond" : 1610906872152,
            "money" : 3456,
            "spendOrEarn" : "Expenses",
            "type" : "groceries"
          }
        }
      }
    }
}
 

Ответ №1:

Вы выполняете запрос /users/$uid/Money . Это означает, что Firebase принимает дочерние узлы непосредственно под этим местоположением и:

  1. Упорядочивает их по своему millisecond свойству.
  2. Затем возвращает только фрагмент, который вы указываете с startAt помощью и endAt .

Проблема в том, что прямой дочерний узел находится под /users/$uid/Money is /users/$uid/Money/17-01-2021 , и у этого узла нет millisecond свойства.

Запросы Firebase работают с плоским списком прямых дочерних узлов, поэтому, если вы хотите запросить денежные узлы пользователем: сохраните их в виде плоского списка непосредственно под /users/$uid/Money ним, вместо того, чтобы группировать их по дате.