我正在使用firebase,我需要检查用户名是否存在,
我使用Query
检查所有用户名,如果我找到相同的用户名,则无法继续创建帐户。
但由于某种原因,Query
已执行,即使我可以在调试器中输入查询,也可能是在最后执行的查询或其他内容,而不是代码的顺序。
希望你能帮助我, 这是我的代码片段:
顺便说一句,如果那件事情的话,该片段就在AlertDialog中。
btnCreate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
errorFlag = 0;
txtNote = (TextView) view.findViewById(R.id.note);
txtEmailReg = (EditText) view.findViewById(R.id.txtEmailReg);
txtPassReg = (EditText) view.findViewById(R.id.txtPassReg);
txtRepassReg = (EditText) view.findViewById(R.id.txtRepassReg);
txtUsernameReg = (EditText) view.findViewById(R.id.txtUsername);
final ArrayList<String> Users = new ArrayList<String>();
Query query = mDatabaseReference.child("users").orderByKey();
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String userName = snapshot.getValue((User.class)).username;
Users.add(new String(userName));
}
if (Users.size() > 0) {
for (int i = 0; i < Users.size(); i++) {
if (txtUsernameReg.getText().toString().equals(Users.get(i))) {
Toast.makeText(LoginActivity.this, "username exists", Toast.LENGTH_SHORT);
errorFlag = 1;
}
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
if (errorFlag == 0) {
if (txtRepassReg.getText().toString().length() == 0 || txtEmailReg.getText().toString().length() == 0 || txtPassReg.getText().toString().length() == 0
|| txtUsernameReg.getText().toString().length() == 0) {
errorFlag = 1;
txtNote.setText("one empty field");
}
if (!(txtRepassReg.getText().toString().equals(txtPassReg.getText().toString()))) {
errorFlag = 1;
txtNote.setText("password doesn't match");
}
if (errorFlag == 0) {
CreateAcc(txtEmailReg.getText().toString(), txtPassReg.getText().toString(), dialog,
txtUsernameReg.getText().toString());
}
}
}
});