引用子节点Firebase

时间:2019-03-09 10:35:42

标签: android firebase

我已经开发了一个管理端应用程序,将从那里将电子邮件ID,PIN,城市和国家/地区数据添加到Firebase实时数据库中。然后,我将提供电子邮件并将其固定到客户。因此,我的简单目标是当客户登录时,应在其应用程序上显示城市和国家/地区的数据。为此,我必须在数据库中搜索该特定客户的节点,这可以通过他在登录时输入的电子邮件ID来完成。 我尽力了,但每次返回null。请看看我的代码并帮帮我。

void searchQuery(String email){

        DatabaseReference mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
        Query query = mFirebaseDatabaseReference.child("arvi-admin").orderByChild("mailId").equalTo(email);
        query.addValueEventListener(valueEventListener);


    }



    ValueEventListener valueEventListener = new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {

            try {
                DataModel obj = dataSnapshot.getValue(DataModel.class);
                logData(""+obj.getCity());  //the values are null
            }catch (Exception e){
                Log.d("@@","Error");
                e.printStackTrace();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError){


        }
    };

Firebase Database Image

1 个答案:

答案 0 :(得分:0)

要解决此问题,请更改以下代码行:

Query query = mFirebaseDatabaseReference.child("arvi-admin").orderByChild("mailId").equalTo(email);

Query query = mFirebaseDatabaseReference.orderByChild("mailId").equalTo(email);

如您所见,我删除了对.child("arvi-admin")的调用,因为根不是孩子,因此不应添加到您的引用中。

编辑:

Query query = mFirebaseDatabaseReference.orderByChild("mailId").equalTo(email);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            DataModel obj = ds.getValue(DataModel.class);
            Log.d(TAG, obj.getCity());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
query.addListenerForSingleValueEvent(valueEventListener);