因此,我正在使用Fire base设置列表视图。如果该父节点的子节点= =某些东西(即用户ID),我想在哪里打印父节点。我程序的父节点是日记名称,而此父节点的子节点是那些被允许访问该日记的用户的用户ID。现在,我要检查应用程序用户的ID是否与日记的任何子项匹配。如果子节点存在,则父节点的值将存储在哈希集中。
在这里,我共享了数据库图像的链接- https://photos.app.goo.gl/Wbvc7hanrVKRqBiM9
sortRef = FirebaseDatabase.getInstance().getReference().child("ATMDusers");
sortRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Set<String> set = new HashSet<>();
Iterator iterator =
dataSnapshot.getChildren().iterator();
while (iterator.hasNext()){
set.add(((DataSnapshot)iterator.next()).getKey());
}
list_of_diaries.clear();
list_of_diaries.addAll(set);
arrayAdapter.notifyDataSetChanged();
}
}
因此,我尝试首先迭代父节点,然后级联子节点以在其上迭代以返回日记名称,以将其添加到哈希集中,但是代码被弄乱了。
private void RetrieveAndDisplayDiaries() {
sortRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Iterator iterator = dataSnapshot.getChildren().iterator();
while (iterator.hasNext()){
diaryName = ((DataSnapshot)iterator.next()).getValue().toString();
authorizedGroup();
}
/*list_of_diaries.clear();
list_of_diaries.addAll(set);
arrayAdapter.notifyDataSetChanged();*/
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void authorizedGroup() {
sortRef.child(diaryName).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
set = new HashSet<>();
Iterator verify = dataSnapshot.getChildren().iterator();
while (verify.hasNext()) {
if (currentUserID == ((DataSnapshot)verify.next()).getKey()){
// set.add(diaryName);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
但这没有帮助。 我想我在这里犯了一些大错误,请给我指出。
答案 0 :(得分:0)
因此,在这里我不是创建一个新的父节点来仅比较该父节点中的用户存在,而是决定再添加一个与User节点的信息相关联的子节点。我现在正在做什么,我正在调用mAuth以获取用户的当前用户ID。那么我要迭代该userID的Access节点以在列表视图中打印该值。
正如您在img 2和img 3中看到的那样,有两个不同的片段,第一个用于编辑,第二个用于公众查看。现在,通过我的配置,我可以决定谁可以编辑我的xyz ...