java - 检查一个节点中每个子节点是否存在的最佳方法是什么?

标签 java android firebase firebase-realtime-database

FirebaseDatabase.getInstance().getReference("Block").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot snap : dataSnapshot.getChildren()) {
            if(snap.getKey().equals(myUID)){
                FirebaseDatabase.getInstance().getReference("Block").child(myUID).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot snap : dataSnapshot.getChildren()) {
                            if(snap.getKey().equals(list.get(position).getUid())){
                                FirebaseDatabase.getInstance().getReference("Block").child(myUID).child(list.get(position).getUid()).addValueEventListener(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                        for (DataSnapshot snap : dataSnapshot.getChildren()) {
                                            if(snap.getValue().equals("1")){
                                               call_method();
                                            }else{

                                              //code...
                                            }
                                        }
                                    }

                                    @Override
                                    public void onCancelled(DatabaseError databaseError) {

                                    }
                                });

                            } else {
                               call_method();
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
            } else {
               call_method();
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

    }
});

这段代码运行良好,但它很长,所以我询问最好的编写方式?

我想首先检查Block节点的子节点是否等于我的UID,如果为真,那么我想检查我的UID has child equals to 特定 UID 如果为真,那么我想获取 block 的值,在此示例中为 0

我怎样才能做到这一点?非常感谢。

最佳答案

只需遍历到使用child指定的路径即可。如果路径不存在,您将不会获得任何数据。

FirebaseDatabase.getInstance().getReference("Block")
    .child("MyUUID")
    .child("specificUUID")
    .addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()) {
                // ... Do something
            } else {
                call_method();
            }
       // ... Other code
}

关于java - 检查一个节点中每个子节点是否存在的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212932/

相关文章:

java - Lucene IndexWriter线程安全

java - 为什么从 ByteBuffer 的绝对读取不被认为是线程安全的?

ios - 使用当前时间戳查询该时间之前的所有帖子

firebase - 参数类型 'Object?' 无法分配给参数类型 'Map<String, dynamic>'

firebase - Flutter 应用无法使用 google 登录

java - 是否可以在 spring Boot 中解析依赖 JAR 文件的 REST 端点

java - 为什么我会得到空指针异常?

java - 单击按钮后如何停止 "SPLASH_TIME"?

android - Quickblox,如何使用自定义对象从下载的文件中获取用户标识

android - BroadcastReceiver Intent 不接收额外内容