Как проверить, что результат базового запроса Fire равен 0
Я разрабатываю страницу входа - если данных нет, зарегистрируйте пользователя напрямую. Но на основе данных, возвращенных из базы огня, если результат равен 0, то вставьте в базу огня
if (!txt_phone.equals("")) {
Query query = auth.orderByChild("phoneNo").equalTo(StringUtils.trim(txt_phone)).limitToFirst(1);
query.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User exisitngUser = null;
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
exisitngUser = snapshot.getValue(User.class);
}
Log.d(TAG, "Exisiting User" + exisitngUser.toString());
if (exisitngUser != null && exisitngUser.getPhoneNo() != null && exisitngUser.getPhoneNo().equalsIgnoreCase(txt_phone)) {
Log.i(TAG, "onDataChange Method");
addFlag[0] = true;
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("phoneNo", txt_phone);
intent.putExtra("userName", txt_userName);
startActivity(intent);
finish();
} else if (addFlag[0] = false) {
Log.i(TAG, "onDataChange Method else");
addFlag[0] = true;
addUser = FirebaseDatabase.getInstance().getReference("Messanger");
User login = new User("1", txt_userName, txt_password, txt_phone, null, "Active", null);
addUser.child("loginUser").push().setValue(login);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("phoneNo", txt_phone);
intent.putExtra("userName", txt_userName);
startActivity(intent);
finish();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "getUser:onCancelled", databaseError.toException());
}
});
//This is called before the data is returned, How to I block this until the data is checked
if (!txt_phone.equals("") && addFlag[0] == false) {
Log.i(TAG, "Out of onDataChange Method");
addFlag[0] = true;
addUser = FirebaseDatabase.getInstance().getReference("Message");
User user = new User("1", txt_userName, txt_password, txt_phone, null, "Active", null);
addUser.child("User").push().setValue(user);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("phoneNo", txt_phone);
intent.putExtra("userName", txt_userName);
startActivity(intent);
finish();
}
}
}
});
Это вызывается первым [!txt_phone.equals("") && addFlag[0] == false]
для нового пользователя, даже до того, как будут возвращены результаты запроса. Мне нужно, чтобы он дождался, пока результат не будет возвращен из firebase, если firebase вернет 0, то этот if[!txt_phone.equals("") && addFlag[0] == false]
должен быть выполнен.
Если вы имеете в виду DataSnapshot
, вы всегда можете вызвать метод hasChildren()
, который укажет, есть ли какие-либо результаты запроса, соответствующие вашим критериям. Этот метод возвращает логическое значение, указывающее результат.
Это не повторяющийся вопрос, прочтите вопрос, прежде чем помечать его как повторяющийся.