我已经开发了一个管理员端应用程序,我将把电子邮件ID,pin,city和country数据添加到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){
}
};
要解决此问题,请更改以下代码行:
Query query = mFirebaseDatabaseReference.child("arvi-admin").orderByChild("mailId").equalTo(email);
至
Query query = mFirebaseDatabaseReference.orderByChild("mailId").equalTo(email);
正如你所看到的,我已经删除了对.child("arvi-admin")
的调用,因为root不是一个孩子,不应该在你的引用中添加。
编辑:
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);