How can I use Firebase Query to return a boolean?

I am trying to make a method called sendRegisterUserMessage () that sends a User object to db Firebase if the User does not already exist in the database. For some reason, the method always returns false, despite finding the object in the database using a listener.

In any case, I call this method in my MainActiviy in onCreate ():

MessageSenderHandler.getInstance().sendRegisterUserMessage();

In my MessageSenderHandler class:

//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()
                );
    }
}

Then here is my isCurrentUserRegistered () method in my DatabaseManager class

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();
}

Here is my 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;
}

}

I don't understand why the first two methods print FALSE, but the one that has the actual data listener prints TRUE inside the listener

+4
1
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?

+2

Source: https://habr.com/ru/post/1656881/


All Articles