我正在尝试创建一个名为 sendRegisterUserMessage() 的方法,如果用户不存在于数据库中,该方法会将用户对象发送到 Firebase 数据库。由于某种原因,尽管使用监听器在数据库中找到了对象,但该方法始终返回 false。
无论如何,我在 onCreate() 的 MainActiviy 中调用此方法:
MessageSenderHandler.getInstance().sendRegisterUserMessage();
在我的 MessageSenderHandler 类中:
//Checks if user is Registered- if not it sends a RegisterUser message
public void sendRegisterUserMessage() {
System.out.println("registered: " +DatabaseManager.getInstance().isCurrentUserRegistered()); //This prints false no matter what
if (DatabaseManager.getInstance().isCurrentUserRegistered() == false) {
FirebaseDatabase.getInstance().getReference().child(MessageTypes.REGISTER_USER_MESSAGE).child(
CurrentUser.getInstance().getUserId())
.setValue(
new RegisterUserMessage()
);
}
}
然后这是我的 DatabaseManager 类中的 isCurrentUserRegistered() 方法
public boolean isCurrentUserRegistered() {
Query query = databaseReference.child("/" + MessageTypes.REGISTER_USER_MESSAGE + "/" + CurrentUser.getInstance().getUserId());
query.addValueEventListener(isUserRegisteredDataListener);
System.out.println("REGISTERED:" + isUserRegisteredDataListener.isUserRegisterd()); //This also prints false no matter what
return isUserRegisteredDataListener.isUserRegisterd();
}
这是我的 IsUerRegisteredDataListener
public class IsUserRegisteredDataListener implements ValueEventListener {
static boolean exists;
private static IsUserRegisteredDataListener isUserRegisteredDataListener;
public IsUserRegisteredDataListener() {
isUserRegisteredDataListener = this;
}
public static IsUserRegisteredDataListener getInstance() {
if (isUserRegisteredDataListener == null) {
isUserRegisteredDataListener = new IsUserRegisteredDataListener();
}
return isUserRegisteredDataListener;
}
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
this.exists = dataSnapshot.exists();
System.out.println("EXISTS" + exists)); //This prints true
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
public boolean isUserRegisterd() {
return exists;
}
我不明白为什么前两种方法打印 FALSE 而带有实际数据监听器的方法在监听器内部打印 TRUE
最佳答案
public boolean isCurrentUserRegistered() {
Query query = databaseReference.child("/" + MessageTypes.REGISTER_USER_MESSAGE + "/" + CurrentUser.getInstance().getUserId());
query.addValueEventListener(isUserRegisteredDataListener);
System.out.println("REGISTERED:" + isUserRegisteredDataListener.isUserRegisterd()); //This also prints false no matter what
return isUserRegisteredDataListener.isUserRegisterd();
}
在这个方法中,你必须等待 firebase 结果得到 isUserRegistered
。因此,您的 IsUserRegisteredDataListener
类无法按您的意愿工作。
你能显示你在哪里初始化 isUserRegisteredDataListener
字段吗?
关于android - 如何使用 Firebase 查询返回 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885255/