2017-12-14 1 views
0

Beim Erstellen eines neuen Kontos gibt dieser Code zuerst "signup successful" dann gibt es "Benutzer bereits existiert". Alles andere funktioniert gut.Toasts in if und anderen werden ausgeführt, wenn die andere Bedingung wahr ist. Code gibt zuerst "Anmeldung erfolgreich" dann gibt es "Benutzer existiert bereits"

Hilf mir dabei. Vielen Dank für Ihre Zeit und Unterstützung in dieser Angelegenheit.

auch versucht:

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

aber es ist die Situation noch schlimmer machen, zeigt es immer "user doesn't exist".

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) { 

       } 
      }); 

     } 
    } 
}); 

Antwort

1

Wahrscheinlich ist dies geschieht, weil immer dann, wenn die Schaltfläche geklickt wird und Benutzer ist in Zeichen Zustand der "signup successful" geben, die Sie den Hörer für die Datenänderung Neuregistrierung:

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

Daher Sie empfange die "signup successful" dann "user already exists" Nachricht.

Sie müssen den Datenänderungslistener außerhalb der Klickschaltflächenmethode initialisieren. Etwas wie folgt aus:

final ProgressDialog mDialog; 

private void initDataChangeListener() { 

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

    @Override 
    public void onCancelled(DatabaseError databaseError) { 

    } 
    }); 
} 

dann die initDataChangeListener aufrufen, bevor die Klick-Listener hinzu:

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. 
    } 
    } 
}); 
Verwandte Themen