如何在 Android Studio 中从 Firebase 中查找特定值的计数?

Posted

技术标签:

【中文标题】如何在 Android Studio 中从 Firebase 中查找特定值的计数?【英文标题】:How to find the count of specific values from Firebase in Android Studio? 【发布时间】:2021-12-20 08:55:30 【问题描述】:

我有一个由一堆案例组成的 firebase 数据库。我想遍历所有这些案例,只找到男性案例的数量,男性用“M”表示。

我的数据库图片。

我如何尝试查询这些数据:

databseCOVIDCases = FirebaseDatabase.getInstance().getReference();

databseCOVIDCases.addValueEventListener(new ValueEventListener() 
   @Override
   public void onDataChange(@NonNull DataSnapshot snapshot) 
       for (DataSnapshot data : snapshot.getChildren()) 
           if (data.child("Sex").getValue(String.class) == "M") 
               numMaleCases++;
           
       
   

   @Override
   public void onCancelled(@NonNull DatabaseError error)  
);

当我设置文本视图的文本时,它显示为 0,然后由于内存不足错误而崩溃。

【问题讨论】:

【参考方案1】:

我建议using a query 仅读取这些节点,而不是遍历所有情况并计算SexM 的情况。这样可以节省您(和您的用户)加载 Sex 不是 M 的所有节点的带宽。

在代码中:

Query query = databseCOVIDCases.orderByChild("Sex").equalTo("M");
query.addValueEventListener(new ValueEventListener() 
   @Override
   public void onDataChange(@NonNull DataSnapshot snapshot) 
       Log.i("Cases", "M case count: "+snapshot.getChildrenCount());
   

   @Override
   public void onCancelled(@NonNull DatabaseError error)  
       throw error.toException(); // Never ignore errors
   
);

虽然上述方法有效,但需要牢记以下几点:

任何需要计数的代码都必须在onDataChange 方法内或从那里调用。其他代码可能无法在您期望的时候运行。

有关这方面的更多信息,请参阅 getContactsFromFirebase() method return an empty list 和 Setting Singleton property value in Firebase Listener

读取所有这些节点只显示它浪费的计数。将所需的实际计数存储在数据库中并在添加/删除M 节点时更新它更实用(尽管如果您来自 SQL 背景则不常见)。当您执行此操作时,您的写入操作会变得更加复杂,而您的读取操作会变得更简单、更便宜且更具可扩展性。

有关更多信息,请参阅 How to get size of an element/list in Firebase without get it all? 和 Is the way the Firebase database quickstart handles counts secure?

【讨论】:

以上是关于如何在 Android Studio 中从 Firebase 中查找特定值的计数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Studio 中从 Firebase 中查找特定值的计数?

如何在android studio中从0.000000、0.000001、......格式连续增加数字

如何在 Android Studio 中从 Apollo Client (GraphQL) 导入生成的类

如何使用firebase在android studio中从一个用户向另一个用户发送通知[重复]

如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio

在android studio中从git添加PullToRefresh [重复]