#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 принимает дочерние узлы непосредственно под этим местоположением и:
- Упорядочивает их по своему
millisecond
свойству. - Затем возвращает только фрагмент, который вы указываете с
startAt
помощью иendAt
.
Проблема в том, что прямой дочерний узел находится под /users/$uid/Money
is /users/$uid/Money/17-01-2021
, и у этого узла нет millisecond
свойства.
Запросы Firebase работают с плоским списком прямых дочерних узлов, поэтому, если вы хотите запросить денежные узлы пользователем: сохраните их в виде плоского списка непосредственно под /users/$uid/Money
ним, вместо того, чтобы группировать их по дате.