如何检查Firebase实时数据库中是否存在子子项?

时间:2018-04-19 10:12:15

标签: java android firebase firebase-realtime-database

我的主要节点Employees有3个值:Mob。没有,UserPIN和empID。如果输入的UserPIN存在于thos节点下,我需要检查我的一个活动。我不能通过使用:

来做到这一点
if(datasnapshot.child(enteredUserPIN).exists(){
}

而且我在检查Mob时也无法更改节点布局。没有。以及另一项活动。另外我不能直接给道路直到暴徒。没有。 请指导。

员工节点:

Employees table

修改

我的代码:

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

2 个答案:

答案 0 :(得分:0)

如果无法更改当前的表格布局。您应该创建一个单独的节点,您只需将所有引脚作为键值对,例如Pin作为键,真值作为值。你可以检查引脚是否存在

答案 1 :(得分:0)

要解决此问题,您需要在Query对象上使用exists()DataSnapshot方法,如下所示:

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);

根据您的编辑,请使用以下代码:

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);