仅获取实时数据库的记录数,无需从数据库中检索所有日期

问题描述 投票:0回答:1

根据下一篇文章:

代码:

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);

它将返回记录数。不幸的是,上面的代码将下载整个数据库。在快照中,我们将找到有关数据库中任何注册的详细信息。这将增加数据流量并自动增加额外费用。有没有可能只从服务器接收记录数的信息,而不从服务器接收数据库的所有数据?

java android firebase firebase-realtime-database
1个回答
0
投票

不幸的是,上面的代码将下载整个数据库。

是真的。对于查询返回的所有帖子,您共享的代码将仅返回

comments
节点中存在的节点数。获取数据库中所有记录的代码如下所示:

rootRef.addListenerForSingleValueEvent(valueEventListener);

这是完全不同的。

是否有可能只从服务器接收记录数的信息,而不从服务器接收数据库的所有数据?

您没有收到数据库中的所有数据,而只是收到查询返回的数据。如果您认为查询结果会获得太多节点,那么我建议您自己创建并维护一个计数器。这样,您只需读取单个数字而无需执行查询。

© www.soinside.com 2019 - 2024. All rights reserved.