java - Firebase getChildrenCount() 总是返回 '1'

标签 java android firebase firebase-realtime-database

在我的应用程序中,我尝试获取所有可用的用户。为此,每个用户都有一个参数,要么是“真”,要么是“假”。我想返回该参数为“真”的用户数量。

在这种情况下,数据如下所示: data structure

我试过这样做,代码被切到必要的部分:

public class MainActivity extends AppCompatActivity {

    private DatabaseReference mDatabase, mUsers;
    private FirebaseAuth mAuth;
    private FirebaseUser firebaseUser;

    private String userID;

    private Button startButton;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAuth = FirebaseAuth.getInstance();

        mDatabase = FirebaseDatabase.getInstance().getReference();
        mUsers = FirebaseDatabase.getInstance().getReference().child("users");

        startButton = (Button) findViewById(R.id.button);



        startButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Query allAvailable = mUsers.orderByChild("available").equalTo("true");

                allAvailable.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

                        if (dataSnapshot.exists()) {

                            long xy = dataSnapshot.getChildrenCount();
                            Toast.makeText(MainActivity.this, String.valueOf(xy), Toast.LENGTH_SHORT).show();   
                        }

                    }

                });

            }
        });

    }
}

但是我尝试这样做,getChildrenCount() 始终返回值 1。为什么它不返回具有可用参数的所有用户的数量为真?

最佳答案

你需要使用ValueEventListener:

mUsers = FirebaseDatabase.getInstance().getReference().child("users");
Query allAvailable = mUsers.orderByChild("available").equalTo("true");

reference.addValueEventListener(new ValueEventListener() {
  @Override
public void onDataChange(DataSnapshot dataSnapshot) {
     long xy = dataSnapshot.getChildrenCount();
}
  @Override
public void onCancelled(DatabaseError databaseError) {
  }
});

来自docs :

public long getChildrenCount ()

Returns The number of immediate children in the this snapshot

当您使用 addChildEventListener 时,您在 dataSnapshot 内部循环,因此从 getChildrenCount() 中只得到 1。

在上面的代码中,datasnapshot 将返回 user 节点的快照,其中 available 等于 true,然后当您添加listener 你将能够检索满足上述查询的节点 users 下的所有直接子节点的数量。

关于java - Firebase getChildrenCount() 总是返回 '1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53470480/

相关文章:

android - e : [kapt] 'com.sun.tools.javac.util.Context' class can't be found ('tools.jar' is absent in the plugin classpath). Kapt 不起作用

android - 从 github 查看 Android 源代码

firebase - 如何创建包含多个工作人员的队列?

java - 安卓工作室 : create Java project with no Android dependencies

swift - 如何检查 Firebase 中 autoID 子项下保存的值?

android - 如何在 Firebase 中获取子整数的值?

java - 使用 eclipse jdt/ast 内联 java 代码

java - 如何使用 JDBC 在 Oracle 中插入很长的时间(以毫秒为单位)

java - 在 Java Swing 中如何判断两个 JList 中哪个 JList 具有光标焦点?

java - Spring 与 JSON 前缀配置有关的问题