根据下一篇文章:
代码:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("Posts").orderByChild("uid").equalTo(current_user_uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
long count = ds.child("comments").getChildrenCount();
Log.d("TAG", "Count: " + count);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
query.addListenerForSingleValueEvent(valueEventListener);
它将返回记录数。不幸的是,上面的代码将下载整个数据库。在快照中,我们将找到有关数据库中任何注册的详细信息。这将增加数据流量并自动增加额外费用。有没有可能只从服务器接收记录数的信息,而不从服务器接收数据库的所有数据?
不幸的是,上面的代码将下载整个数据库。
这不是真的。对于查询返回的所有帖子,您共享的代码将仅返回
comments
节点中存在的节点数。获取数据库中所有记录的代码如下所示:
rootRef.addListenerForSingleValueEvent(valueEventListener);
这是完全不同的。
是否有可能只从服务器接收记录数的信息,而不从服务器接收数据库的所有数据?
您没有收到数据库中的所有数据,而只是收到查询返回的数据。如果您认为查询结果会获得太多节点,那么我建议您自己创建并维护一个计数器。这样,您只需读取单个数字而无需执行查询。