2017-12-14 1 views
0

새 계정을 만들 때이 코드는 먼저 "signup successful"을 제공하고 "사용자가 이미 있습니다"라고 표시합니다. 다른 모든 것은 잘 작동합니다.if 및 else의 토스트는 else 조건이 true 일 때 실행됩니다. 코드는 먼저 "가입 성공"을 표시 한 다음 "사용자가 이미 있습니다"라고 말합니다.

도와주세요. 이 문제에 시간과 도움을 주셔서 대단히 감사합니다.

도 시도 :

dataSnapshot.child(edtRoll.getText().toString())!=null 

를하지만 상황이 더 악화 항상 "user doesn't exist"을 보여줍니다. 따라서 당신을

btnSignUp.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    if (...) { 
     ... 
    } else { 
     table_user.addValueEventListener(new ValueEventListener() { 
     ... 
     } 
    } 
    } 
}); 

: 버튼을 클릭하고 사용자가 가입 "signup successful"를주는 상태에있는 때마다, 당신은 데이터 변경에 대한 리스너를 다시 등록하고 있기 때문에

btnSignUp.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 

     if (edtRoll.getText().toString().trim().length()!= 9) 
      Toast.makeText(SignUp.this, "Roll No. must have 9 characters!", Toast.LENGTH_SHORT).show(); 
     else if (edtName.getText().toString().trim().length() < 3) 
      Toast.makeText(SignUp.this, "Name is too short!", Toast.LENGTH_SHORT).show(); 
     else if (edtPassword.getText().toString().trim().length() < 8) 
      Toast.makeText(SignUp.this, "Password must have atleast 8 characters!", Toast.LENGTH_SHORT).show(); 
     else if(!(edtPassword.getText().toString()).equals(edtConfirmPassword.getText().toString())) 
      Toast.makeText(SignUp.this, "Passwords do not match!", Toast.LENGTH_SHORT).show(); 
     else { 

      final ProgressDialog mDialog = new ProgressDialog(SignUp.this); 
      mDialog.setMessage("Please Wait..."); 
      mDialog.show(); 

      table_user.addValueEventListener(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        //Check if userRoll already exist 
        if (dataSnapshot.child(edtRoll.getText().toString()).exists()) { 
         mDialog.dismiss(); 
         Toast.makeText(SignUp.this, "User already registered!", Toast.LENGTH_SHORT).show(); 
        } else { 
         mDialog.dismiss(); 
         User user = new User(edtName.getText().toString(), edtPassword.getText().toString()); 
         table_user.child(edtRoll.getText().toString()).setValue(user); 
         Toast.makeText(SignUp.this, "Sign up Successfull!", Toast.LENGTH_SHORT).show(); 
         finish(); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

     } 
    } 
}); 

답변

1

은 아마이 일이됩니다 "signup successful" 다음으로 "user already exists" 메시지를 수신했습니다.

데이터 변경 리스너를 클릭 버튼 메소드 외부에서 초기화해야합니다. 이런 식으로 뭔가 :

initDataChangeListener(); 

btnSignUp.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
    if (...) { 
     ... 
    } else { 
     if(mDialog == null) mDialog = new ProgressDialog(SignUp.this); 
     mDialog.setMessage("Please Wait..."); 
     mDialog.show(); 
     // no need to handle the data, because it's already handled by the data change listener. 
    } 
    } 
}); 
:

final ProgressDialog mDialog; 

private void initDataChangeListener() { 

    table_user.addValueEventListener(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     ... 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
    }); 
} 

그런 다음 클릭 리스너를 추가하기 전에 initDataChangeListener 전화