繁体   English   中英

Firebase Android Studio 数据库查询

[英]Firebase Database Query in Android Studio

我想在 Firebase 数据库中进行查询:如果在“检测名称”节点中输入数据,则它会在“受过培训的人员姓名”节点中查询相同的数据,如果两者相等,则它会获取所有同名的子节点,但不是全部值。

如果检测名称节点中的孩子是 maarij,则在受过训练的人名中搜索 maarij 并仅获取 maarij 的所有信息。

数据库:

如果检测名称节点中的孩子是 maarij,则在受过训练的人名中搜索 maarij 并仅获取 maarij 的所有信息。

我尝试使用此代码进行查询,但它提供了保存在 Trained Person Names 节点中的所有数据。 如果在“Trained Person Names”节点中找到“detection name”子节点,我只需要该名称的特定数据和信息。

final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
    mydata.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            final Query myquery =   detection_Name.orderByChild("Detection name").limitToLast(1)
                    .equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
            Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

谢谢!!

你做错了兄弟因为名字不是唯一的词,只使用不会在任何地方重复的唯一参数。 然后你就可以正确地完成你的任务了。 创建一个唯一的 ID 并将该值保存在“检测名称”表中。 使用该值作为“受过培训的人员姓名”表中的键。 现在,您必须先做一件事,从“检测名称”表中获取该值并使用,如下所示:

final Query mydata= FirebaseDatabase.getInstance().getReference().child("Trained Person Names");
mydata.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        final Query myquery =   detection_Name.orderByChild("Detection name").limitToLast(1)
                .equalTo(String.valueOf(trained_Name.orderByChild("Guest Name")));
        Log.i("33","VALUE OF DATASNAPSHOT:"+dataSnapshot.getValue());
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

您可以像这样创建一个唯一值:

String uniqueId = FirebaseDatabase.getInstance().getReference().push().toString();

我解决了我的问题。 我在我的代码中获取了节点检测名称节点,而不是将此名称发送给受过训练的人名称节点,并且只获取特定人员的信息而不是所有人的信息。

    trained_Name.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       String detected_name = String.valueOf(dataSnapshot.child(detect_Name.toLowerCase()).getValue());
       Log.i("data","Detected Person Info Only:"+" "+ detected_name);
       String formattedData=formatString( detected_name);
       tv1.setText(formattedData);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

我通过以下代码检索了检测到的人节点的姓氏:

    detection_Name.addChildEventListener(new ChildEventListener() {
        @RequiresApi(api = Build.VERSION_CODES.M)
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
            String last_name = String.valueOf(dataSnapshot.getValue());
           detect_Name= last_name;
            Log.i("Retrieve name only:", String.valueOf(dataSnapshot.getValue()));
            

        }

        @Override

        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM