我已经开发了一个管理端应用程序,将从那里将电子邮件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){
}
};
答案 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);