2016-07-16 1 views
0

J'ai un problème avec ma page d'enregistrement avec firebase mais en particulier avec le Toast. J'utilise la base de données Firebase. Avec ma page d'inscription je mets les données de l'utilisateur dans ma base de données mais si le nom d'utilisateur est égal à un autre dans la base de données, l'application me montre un toast ("Nom d'utilisateur déjà enregistré, réessayer"). Lorsque je m'inscris avec un nouveau nom d'utilisateur, le toast me montre "Registration Success" et ensuite je vois une série de toasts qui disent ceci: "Nom d'utilisateur est déjà enregistré, réessayez". Je pense que le problème est très facile mais je ne connais pas la solution. Merci d'avance.Page d'enregistrement, Toast et Firebase

enter image description here

Registration.java:

public class Registration extends AppCompatActivity { 
EditText ET_USER_LOCATION, ET_USER_MAIL, ET_USER_NAME, ET_USER_PASS; 
String user_location, user_mail, user_name, user_pass, user_bitmapImage = "NoImage"; 
Button registerButton; 
Context mContext; 

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference users = database.getReference("Users").child("UserApp"); 
String key = users.child("UserApp").push().getKey(); 
String token = FirebaseInstanceId.getInstance().getToken(); 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_registration); 
    mContext = this; 

    ET_USER_LOCATION = (EditText) findViewById(R.id.new_user_location); 
    ET_USER_MAIL = (EditText) findViewById(R.id.new_user_mail); 
    ET_USER_NAME = (EditText) findViewById(R.id.new_user_name); 
    ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass); 

    registerButton = (Button) findViewById(R.id.registerButton); 

    registerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      user_location = ET_USER_LOCATION.getText().toString(); 
      user_mail = ET_USER_MAIL.getText().toString(); 
      user_name = ET_USER_NAME.getText().toString(); 
      user_pass = ET_USER_PASS.getText().toString(); 

      users.addValueEventListener(new ValueEventListener() { 
       @TargetApi(Build.VERSION_CODES.KITKAT) 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        String result = registerWithoutRepetition(dataSnapshot); 
        if(Objects.equals(result, "Username is already registered, try again")){ 
         Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show(); 
        } else if(Objects.equals(result, "Registration Success")){ 
         Toast.makeText(mContext, result, Toast.LENGTH_SHORT).show(); 
         finish(); 
        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 

     } 
    }); 
} 


@TargetApi(Build.VERSION_CODES.KITKAT) 
private String registerWithoutRepetition(DataSnapshot dataSnapshot){ 
    String result; 
    for(DataSnapshot snapshot : dataSnapshot.getChildren()) { 
     UserApp userApp = snapshot.getValue(UserApp.class); 
     if (Objects.equals(userApp.user_name, user_name)) { 
      result = "Username is already registered, try again"; 
      return result; 
     } 
    } 
    writeNewUser(key, user_name, user_mail, user_pass, user_location, token, user_bitmapImage); 
    result = "Registration Success"; 
    return result; 
} 


private void writeNewUser(String user_id, String user_name, String user_mail, String user_pass, 
          String user_location, String user_token, String user_bitmapImage) { 
    UserApp user = new UserApp(user_name, user_mail, user_pass, user_location, user_token, user_bitmapImage); 

    users.child(user_id).setValue(user); 
} 
+1

Après avoir enregistré un écouteur avec 'addValueEventListener()', il se déclenchera * à chaque fois que quelque chose change dans le noeud users. Vous n'êtes probablement intéressé que par un seul événement, auquel cas vous pouvez utiliser [addListenerForSingleValueEvent() '] (https://firebase.google.com/docs/database/android/retrieve-data#read_data_once). –

+0

J'ai déjà essayé avec un auditeur mais rien et maintenant ça marche. Merci beaucoup. – Carlo

Répondre

1

Une fois que vous enregistrez un écouteur addValueEventListener(), il se déclenche chaque fois que quelque chose change dans le nœud utilisateurs.

Vous n'êtes probablement intéressé que par un seul événement, auquel cas vous pouvez use addListenerForSingleValueEvent().