我想检查是否存在具有特定电子邮件的密钥。如果存在,我需要获取键的值(应用程序中用户的唯一id ),并检查应用程序中输入的id是否与从数据库中获取的id匹配。但问题是,我的onDataChange()在我执行相等性检查之后会做出响应。可以做些什么呢?
rootRef.child("shortlisted").child(email1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
try {
if (snapshot.getValue() != null) {
try {
aac = snapshot.getValue().toString();
System.out.println("STRINGAAC"+aac);
} catch (Exception e) {
e.printStackTrace();
}
} else {
//user doesnt exist
Log.e("TAG", " it's null.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
System.out.println("STRINGAAC"+aac);
if(aac.equals("not found"))
{
Toast.makeText(globalContext,"not found", Toast.LENGTH_SHORT).show();
}
if(aac.equals(aacid_s))
{
Toast.makeText(globalContext,"Key Matched value", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(globalContext,"Key un-Matched value", Toast.LENGTH_SHORT).show();
}发布于 2021-01-30 16:58:54
这是一个正常的行为,因为firebase API是异步的,这基本上意味着当你运行上面的代码时,onDataChange()之后的代码甚至在检索完整数据之前就会被调用。因此,要解决此问题,您必须执行以下操作:
rootRef.child("shortlisted").child(email1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NotNull DataSnapshot snapshot) {
try {
if (snapshot.getValue() != null) {
try {
aac = snapshot.getValue().toString();
System.out.println("STRINGAAC"+aac);
if(aac.equals("not found"))
{
Toast.makeText(globalContext,"not found", Toast.LENGTH_SHORT).show();
}
if(aac.equals(aacid_s))
{
Toast.makeText(globalContext,"Key Matched value", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(globalContext,"Key un-Matched value", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
} else {
//user doesnt exist
Log.e("TAG", " it's null.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});https://stackoverflow.com/questions/65966120
复制相似问题