这个代码在firebase和android中有什么问题

时间:2017-06-29 10:25:26

标签: android firebase firebase-realtime-database

 usersRef= myRef.child("users");
        usersRef.orderByChild("name").equalTo("yair").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                User user=new User();
                user.setName(dataSnapshot.getValue(User.class).getName());
                user.setEmail(dataSnapshot.getValue(User.class).getEmail());
                user.setId(dataSnapshot.getValue(User.class).getId());
                user.setPhone_num(dataSnapshot.getValue(User.class).getPhone_num());

我的firebase看起来像这样:

users
 Y6NKciGllTgkLXlMj9YLlAFuw522
 email: 
"yk.yair@gmail.com"
 id: 
"Y6NKciGllTgkLXlMj9YLlAFuw522"
 name: 
"yair"
 phone_num: 
"050-7777151"
 kfby10Wy16Rx12v7Mx0sksqUTE72
 email: 
"aaa"
 id: 
"kfby10Wy16Rx12v7Mx0sksqUTE72"
 name: 
"aaa"
 phone_num: 
"(050)7777151"

似乎用户始终保持为空; 有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

要解决此问题,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String email = ds.child("email").getValue(String.class);
            User user = new User();
            user.setEmail(email);
            //and so on
            Log.d("TAG", email);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
usersRef.addListenerForSingleValueEvent(eventListener);

您的输出将是:

yk.yair@gmail.com

另一种方法是更改​​DatabaseReference并使用相同的代码:

DatabaseReference usersRef = rootRef.child("users").child(userId);

其中userIdpush()方法生成的唯一ID。

希望它有所帮助。

答案 1 :(得分:0)

试试这个:

mFirebaseDatabase = FirebaseDatabase.getInstance();
mFirebaseDatabase.getReference().child("users").orderByChild("name").equalTo("yair").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.getValue() == null){
                Log.i("IS NULL", "IS NULL");
            } else{
                User user = dataSnapshot.getValue(User.class);
                Log.i("user name", user.getName());
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

并确保您的数据库结构如下: enter image description here