Я пытаюсь получить некоторые данные списка и поместить их в список. Но я не смог этого сделать. Я перепробовал так много вещей, но ни одна из них не сработала.
Это моя структура базы данных. ![Database Structure](https://i.stack.imgur.com/VF9g4.jpg)
Таким образом, есть основной root, который является пользователем, а затем имя пользователя, в данном случае это "мм". Этот узел включает в себя некоторые данные и некоторые другие узлы. Расходы являются одним из них. В расходах есть несколько уникальных ключей. Каждый уникальный ключ обозначает другую квитанцию. И каждый уникальный ключ хранит продукты этого чека. В этом случае их три (0-1-2). Нет трех ограничений. Это может быть 3, 1 или 15. Каждый из этих узлов хранит значение в типе класса «Расходы».
Я хочу взять эти данные в список. Так что в этом списке должны храниться такие данные.
{
{
Receipt1: {
amount: 1,
marketName: "aa",
price: 2,
productName: "bb"
},
{
amount: 2,
marketName: "cc",
price: 3,
productName: "dd"
}
}, {
Receipt2: {
{
amount: 3,
marketName: "ee",
price: 5,
productName: "ff"
},
{
amount: 1,
marketName: "gg",
price: 7,
productName: "jj"
},
{
amount: 9,
marketName: "nn",
price: 5,
productName: "vv"
}
}
}
Так что я должен иметь возможность отдельно получать квитанции. Если я ищу Receipt1, я должен получить 3 узла, как в примере.
Я пытаюсь получить эти данные вот так. Но это не работает.
private void receiptGetter(String userName,SimpleCallback<Boolean> finishedCallback) {
DatabaseReference rootRef = databaseManager.getReference();
DatabaseReference expensesRef = rootRef.child("user").child(userName).child("expenses");
Query queryReceiptFinder = expensesRef.orderByKey();
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
expenses = ds.getValue(Expenses.class);
expensesList.add(expenses);
}
finishedCallback.run(true);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("error", databaseError.getMessage());
finishedCallback.run(false);
}
};
queryReceiptFinder.addListenerForSingleValueEvent(valueEventListener);
}
Затем я пытаюсь получить эти данные вот так.
searchButton.setOnClickListener(v -> {
receiptGetter("userName", (success) -> {
if (success) {
String receipt = expensesList.toString();
receiptText.setText(receipt);
} else
Log.d("error", getString(R.string.ErrorOccured));
});