2017-12-14 10 views
0

新しいアカウントを作成すると、このコードは最初に"signup successful"と表示され、「ユーザーは既に存在します」と表示されます。他のすべてがうまくいきます。elseおよび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"というメッセージを受信しました。

クリックボタン方式以外でデータ変更リスナーを初期化する必要があります。このような何か:

final ProgressDialog mDialog; 

private void initDataChangeListener() { 

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

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
    }); 
} 

クリックリスナーを追加する前にinitDataChangeListenerを呼び出す:

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. 
    } 
    } 
}); 
関連する問題