如何在 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 仅读取这些节点,而不是遍历所有情况并计算Sex
为M
的情况。这样可以节省您(和您的用户)加载 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中从一个用户向另一个用户发送通知[重复]