当我只想要特定的 child 时,Firebase 侦听器返回所有 children

Firebase listener returning all children when i only want a specific child

这是我的数据库结构:

这是我的代码:

mDatabase.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            getTasks(dataSnapshot);
            mTasksRecyclerView.setVisibility(View.VISIBLE);
            mProgressBar.setVisibility(View.INVISIBLE);
        }
.
.
.

//populate recyclerview with data from firebase
private void getTasks(DataSnapshot dataSnapshot) {
    for (DataSnapshot singleSnapshot : dataSnapshot.getChildren()) {
        mTasks.add(singleSnapshot.getValue(Task.class));
    }
    Collections.sort(mTasks);
    mAdapter = new TaskAdapter(mTasks, getContext());
    mTasksRecyclerView.setAdapter(mAdapter);

问题是此代码检索数据库、任务和用户中的所有内容,并以某种方式将用户 objects 添加到我的任务数组列表中,并导致空白项目显示在我的回收站视图中。我可以使用什么代码来仅检索数据库“任务”部分中的项目?

我知道这是因为 datasnapshot.getChildren 正在返回数据库中的所有内容。我认为使用 datasnapshot.child("Tasks") 会起作用,但它没有。

datasnapshot.child("Tasks") 

将不起作用,您需要在数据库引用中引用任务 table,然后将 childEventListener 添加到其中。试试这个。

DatabaseReference ref = mDatabase.child("Tasks");
ref.addChildEventListener(new ChildEventListener() { 
    @Override 
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        getTasks(dataSnapshot);
        mTasksRecyclerView.setVisibility(View.VISIBLE);
        mProgressBar.setVisibility(View.INVISIBLE);
    } 

希望对您有所帮助

关键是在您的数据引用中设置路径。你需要做的:

DatabaseReference db = mDatabase.child("Tasks").child("YourTask");
   db.addChildEventListener(new ChildEventListener(){
   @Override
   public void onChildAdded...
   @Override
   public void onChildRemoved...
   @Override
   public void onChildUpdated...