如何从firebase数据库中获取数据列表?

Posted

技术标签:

【中文标题】如何从firebase数据库中获取数据列表?【英文标题】:How to get a list of data from firebase database? 【发布时间】:2020-05-04 02:07:35 【问题描述】:

我正在尝试获取一些列表数据并放入列表中。但我做不到。我尝试了很多东西,但都没有奏效。

这是我的数据库结构。

所以有一个主根是用户,然后是用户名,在这种情况下它是“mm”。该节点包括一些数据和一些其他节点。费用就是其中之一。在费用中有一些独特的键。每个唯一键都表示不同的收据。并且每个唯一的密钥存储这张收据的产品。在这种情况下,有三个 (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));
            );

【问题讨论】:

您可以在您的案例中将快照读取为对象的 ArrayList 【参考方案1】:

我认为 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");

【讨论】:

是的,但这是一个大项目。我正在研究它很长一段时间。此方法只是当前应用程序的一种实现。我无法将它交换到 Firestore,这将花费很多时间。但是感谢您提供的信息,我将使用 Firestore 用于我未来的开发目的

以上是关于如何从firebase数据库中获取数据列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?

如何使用java从firebase数据库中的列表中获取所有值?

从firebase获取列表数据,或如何构建数据

如何从 Firebase Firestore 获取数据并将其存储在列表中以在颤振小部件中使用?

尝试从实时数据库绑定数据以获取列表视图

如何从firebase数据库中获取一个孩子