当我只想要特定的 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...
这是我的数据库结构:
这是我的代码:
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...