I am trying to check for an entry in my Firebase Database asynchronously using an interface, but I'm not sure how to implement it in the same way I have for password and email.
Example:
if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
            mPasswordView.setError(getString(R.string.error_invalid_password));
            focusView = mPasswordView;
            cancel = true;
        }
private boolean isPasswordValid(String password) {
        // Add logic to check for a valid password (minimum 8 characters)
        String confirmPassword = mConfirmPasswordView.getText().toString();
        return (confirmPassword.equals(password)) && (password.length() > 7) && (password != "12345678") && (password != "password");
    }
I am attempting to create a similar method with username that checks for the entered username in Firebase and then returns true if data is found. I've created a method (fetchUsername) to check for the name in Firebase on the background thread, but cannot figure out how to properly pass the result back to the final method and return a boolean. I believe I'm making a silly syntax error, but I can't see it. Here is what I have:
private boolean isUsernameDuplicate(final String username) {
    boolean userIsOnFirebase ( boolean isOnFirebase){ ///<----line that won't take, wants semicolon after variable
        if (isOnFirebase) {
            return true;
        } else {
            return false;
        }
    }
    fetchUsername(username, new FirebaseSuccessListener() {
        @Override
        public void onDataFound(boolean isDataFetched) {
            if (isDataFetched) {
                userIsOnFirebase(true);
            } else {
                userIsOnFirebase(false);
            }
        }
    });
    return userIsOnFirebase;
}
private void fetchUsername(final String username, final FirebaseSuccessListener dataFetched) {
    //checks database for username
    mReference = FirebaseDatabase.getInstance().getReference().child("users").child("username");
    mReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                dataFetched.onDataFound(true);
            }
        }
        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
        }
    });
}
public interface FirebaseSuccessListener {
    void onDataFound(boolean isDataFetched);
}
Edit: Here is my solution:
    //member Variables
    String checkedUsername;
private void attemptRegistration() {
    // Reset errors displayed in the form.
    mEmailView.setError(null);
    mPasswordView.setError(null);
    checkedUsername=null;
    // Store values at the time of the login attempt.
    String email = mEmailView.getText().toString();
    String password = mPasswordView.getText().toString();
    String username = mUsernameView.getText().toString();
    boolean cancel = false;
    View focusView = null;
        if (TextUtils.isEmpty(username)) {
            mUsernameView.setError(getString(R.string.error_field_required));
            focusView = mUsernameView;
            cancel = true;
        }
        if (!isUsernameValid(username)) {
            mUsernameView.setError("Username is taken");
            focusView = mUsernameView;
            cancel = true;
        }
private boolean isUsernameValid(String username) {
        if (!duplicateUsername(username)) {
            return true;
        } else {
            Toast.makeText(this, "Username is taken", Toast.LENGTH_LONG);
            return false;
        }
    }
    private boolean duplicateUsername(String username) {
        if (fetchUsername(username) != null) {
            return true;
        }
        return false;
    }
    private String fetchUsername(final String username) {
        //checks database for username
        mReference = FirebaseDatabase.getInstance().getReference().child("users");
        mReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    User user = new User();
                    user = dataSnapshot.getValue(User.class);
                    if (user.getUsername() == username) {
                        checkedUsername = user.getUsername();
                    }
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
        return checkedUsername;
    }
 
    