当我只想要一个特定的孩子时,Firebase监听器会返回所有孩子

时间:2017-04-14 01:07:42

标签: android database firebase firebase-realtime-database firebase-storage

这是我的数据库结构:

1

这是我的代码:

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

问题是此代码检索数据库,任务和用户中的所有内容,并以某种方式将用户对象添加到我的任务arraylist,并导致空白项目显示在我的recyclerview中。我可以使用哪些代码来仅检索数据库的“任务”部分中的项目?

我知道发生了这种情况,因为datasnapshot.getChildren正在返回数据库中的所有内容。我以为使用datasnapshot.child(“任务”)会起作用,但事实并非如此。

2 个答案:

答案 0 :(得分:1)

datasnapshot.child("Tasks") 

不起作用,您需要在数据库引用中引用Tasks表,然后将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);
    } 

希望这有帮助

答案 1 :(得分:0)

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

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