Как получить список данных из базы данных Firebase? - PullRequest
0 голосов
/ 17 января 2020

Я пытаюсь получить некоторые данные списка и поместить их в список. Но я не смог этого сделать. Я перепробовал так много вещей, но ни одна из них не сработала.

Это моя структура базы данных. Database Structure

Таким образом, есть основной 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));
            });

1 Ответ

0 голосов
/ 17 января 2020

Я думаю, что Firestore больше подходит для ваших целей, чем база данных в реальном времени. Если вы можете использовать его в документации, вы можете увидеть, как получить доступ к каждому документу.

Это ссылка на официальную документацию: https://firebase.google.com/docs/firestore/query-data/get-data

Как правило, вы можете получить доступ к документу с помощью:

DocumentReference docRef = db.collection("cities").document("SF");
// asynchronously retrieve the document
ApiFuture<DocumentSnapshot> future = docRef.get();
// ...
// future.get() blocks on response
DocumentSnapshot document = future.get();
if (document.exists()) {
  System.out.println("Document data: " + document.getData());
} else {
  System.out.println("No such document!");
}

, если вы есть вложенный документ:

db.collection("cities").document("SF").collection("nameCollection").document("documentName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...