email_check.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
isDict = false;
userReference = databaseReference.child("users");
userReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
String uuid = snapshot.getKey(); //문자열로 받기
Log.i(TAG, "유유" + uuid);
userReference.child(uuid).child("email").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (!task.isSuccessful()) { }
else {
String s = String.valueOf(task.getResult().getValue());
em = up_email.getText().toString();
if(s.equals(em)){
isDict = true;
Toast.makeText(getApplicationContext(), "아이디가 중복됩니다! ", Toast.LENGTH_SHORT).show();
}
}
}
});
if(isDict){
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
}
});
if(isDict){
Toast.makeText(getApplicationContext(), "아이디가 중복됩니다! ", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(getApplicationContext(), "아이디가 중복되지 않습니다! ", Toast.LENGTH_SHORT).show();
}
}
});
안녕하세요, 안드로이드 공부 중인 학생입니다.
코드는 다음과 같습니다.
onClick 콜백 메소드 내부에 또 다른 리스너를 등록해놓았는데요,
스냅샷으로 Firebase에서 uid 전체를 읽어오고 전체 uid 하위에 저장된 이메일을 읽어와서 이메일 중복검사를 하는 테스크입니다.
그런데 중복되는 아이디를 넣고 버튼을 눌러서 해당 토스트메세지가 출력되는 결과를 보면 처음에 아이디가 중복되지 않았다고 뜨고 이후에 아이디가 중복되었다는 메시지를 출력하게 됩니다.
아무래도 onClick 내부에 존재하는 리스너들이 비동기적이라 그런 것 같은데 해결방법이 있을까요?
알려주시면 감사하겠습니다.