Firebase DataSnapshot空值

时间:2017-05-03 11:20:07

标签: android firebase firebase-realtime-database

我的应用程序允许您添加播放器到节点,一旦添加它我使用以下方法通过phoneNum搜索以查看该播放器是否存在于“用户”节点中。

我遇到问题的是,我需要能够在找到的匹配节点中为用户访问数据快照中的值。例如,返回用户ID的值。当我尝试这个时它会一直显示为空值,当我尝试登录到控制台时,它会抱怨它是一个空值,因为if语句应该处理这个问题。

该方法能够查找用户节点中是否存在播放器,并显示Toast消息以指示此情况。

Data Structure

代码:

public void checkPlayerNum(final String phoneNum) {
        DatabaseReference mDatabaseReference =


         FirebaseDatabase.getInstance().getReference().child("users");

    if (!TextUtils.isEmpty(phoneNum)) {
        final Query phoneNumReference = mDatabaseReference.orderByChild("phoneNum").equalTo(phoneNum);

        ValueEventListener phoneNumValueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue() != null) {
                   // String key = String.valueOf(dataSnapshot.getValue());
                   User mUser = dataSnapshot.getValue(User.class);

                    String uId = mUser.getUid();

                  //  Log.d("TAG",uId);
                    Toast.makeText(getApplicationContext(), "* found **"+ uId , Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show();
                }
            }

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

        phoneNumReference.addListenerForSingleValueEvent(phoneNumValueEventListener);


    } else {
        Log.e("Error","phoneNum is null");
    }
}

3 个答案:

答案 0 :(得分:2)

final Query query = mFirebaseDatabase.orderByChild("phoneNum").equalTo("userPhoneNumber");
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    //here means the value exist
                    //do whatever you want to do
                } else {
                    //here means the value not exist
                    //do whatever you want to do
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
            }
        });

用它来检查数据是否存在。

答案 1 :(得分:0)

您需要分两步完成此操作,首先检查用户是否存在。然后您将获得userId的用户信息。

DatabaseReference mDatabaseReference;

public void checkPlayerNum(final String phoneNum,final String userId) {
             mDatabaseReference = 
                FirebaseDatabase.getInstance().getReference().child("users");

        if (!TextUtils.isEmpty(phoneNum)) {
            final Query phoneNumReference = mDatabaseReference.orderByChild("phoneNum").equalTo(phoneNum);

            ValueEventListener phoneNumValueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.getValue() != null) {
                        // user exists 
                        getUserInf(userId);

                    } else {
                        Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show();
                    }
                }

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

            phoneNumReference.addListenerForSingleValueEvent(phoneNumValueEventListener);


        } else {
            Log.e("Error","phoneNum is null");
        }
    }

通过userId获取用户信息。 mDatabaseReference与以前相同。将其定义为成员字段。

     void getUserInf(String userId) {
            userValueEventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    // get user data
                   User mUser = dataSnapshot.getValue(User.class);

                 }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            };
            mDatabaseReference.child(userId).addListenerForSingleValueEvent(userValueEventListener);
        }

您的用户Pojo应该如下所示。

public class User {
    String email,name,phoneNum,uid;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }
}

答案 2 :(得分:0)

感谢我通过使用childEventListener

设法实现的每个人
public void checkingNumber(final String phoneNum){
    DatabaseReference mDatabaseReference =
            FirebaseDatabase.getInstance().getReference().child("users");
    final Query query = mDatabaseReference;
    query.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if (dataSnapshot.getValue() != null) {
                // String key = String.valueOf(dataSnapshot.getValue());
                User mUser = dataSnapshot.getValue(User.class);

               // String uId = mUser.getUid();
                // usersDatabase.child(mUser.getUid());
                 // Log.d("TAG",uId);
                if(mUser.getPhoneNum().equals(phoneNum)) {
                   String uId= mUser.getUid();
                    String email = mUser.getEmail();
                    String name = mUser.getName();
                    Toast.makeText(getApplicationContext(), "* found **" + " " + uId + " " + " " + email + " " + name, Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(getApplicationContext(), "****NOT FOUND****", Toast.LENGTH_LONG).show();
            }
        }

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

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

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

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}
相关问题