如何检查Firebase实时数据库中是否存在子子项? [英] How to check if sub child exists in Firebase Realtime Database?

查看:55
本文介绍了如何检查Firebase实时数据库中是否存在子子项?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的主节点Employees具有3个值:Mob.编号,UserPIN和empID.我需要检查我的活动之一,以确保输入的UserPIN是否在thos节点下.我无法通过使用以下方法来做到这一点:

My main node Employees has 3 values: Mob. no., UserPIN and empID. I need to check in one of my activities that if the entered UserPIN exists under thos node or not. I am not able to do this by using:

if(datasnapshot.child(enteredUserPIN).exists(){
}

在检查Mob时,我也无法更改节点布局.不.以及另一项活动.另外,我无法直接给出路径,直到暴民.不.请指导.

And also I can't change my node layout as I am checking for the Mob. no. as well in another activity. Plus I can't directly give the path till the Mob. no. Please guide.

雇员节点:

编辑

我的代码:

private void mpinexists(){
    Log.d("abcd","mpinexists() reached");
    checkmPINRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds:dataSnapshot.getChildren()){
                if(ds.child(enteredmPIN).exists()){
                    Toast.makeText(getActivity(),"mPIN already exists",Toast.LENGTH_SHORT).show();
                    Log.d("abcd","mpin already exists");

                }
                else{
                    Log.d("abcd","mpin doesn't exists");
                    Toast.makeText(getActivity(),"mPIN doesn't exists",Toast.LENGTH_SHORT).show();
                }
            }
}

我的日志:

04-25 21:53:28.889 10147-10147/com.example.abcd.efg D/abcd: mpinexists() reached
04-25 21:53:31.471 10147-10147/com.example.abcd.efg D/abcd: mpin already exists
04-25 21:53:31.472 10147-10147/com.example.abcd.efg D/abcd: mpin doesn't exists

推荐答案

为解决此问题,您需要在像这样的 DataSnapshot 对象:

In order to solve this, you need to use a Query and exists() method on the DataSnapshot object like this:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef
    .child("Employees")
    .child(mobileNumber) //Could be: 765432189
    .child(userPin) //Could be: 123457
    .orderBychild("empid")
    .equalsTo(enteredUserPIN);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()) {
            //Do something
        } else {
            //Do something else
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
query.addListenerForSingleValueEvent(valueEventListener);

根据您的修改,请使用以下代码:

According to your edit, please use the follwing code:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference employeesRef = rootRef.child("Employees");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            if(ds.child(enteredUserPIN).exists()) {
                //Do something
            } else {
                //Do something else
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
employeesRef.addListenerForSingleValueEvent(valueEventListener);

这篇关于如何检查Firebase实时数据库中是否存在子子项?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆