база данных firebase в реальном времени pu sh бесконечный l oop ошибка - PullRequest
1 голос
/ 28 мая 2020

Я использую аутентификацию firebase с адресом электронной почты и паролем.

Итак, я хочу сохранить данные пользователя в базе данных в реальном времени. Но когда я отправил sh данные в базу данных, выполнялся бесконечный l oop.

Я не знаю почему ... Я хочу сохранить данные в такой форме и продолжить сохранение.

Но когда я запускаю, начинается бесконечное l oop

enter image description here

       private void createUser(String email, String password,String name, String phone, String 
   nickname) {
    firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {


                    if (task.isSuccessful()) {    //Join Success


                        Toast.makeText(JoinActivity.this, "Join Success", Toast.LENGTH_SHORT).show();
                        mDatabase.addValueEventListener(new ValueEventListener() {

                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                if(firebaseAuth.getCurrentUser()!=null) {
                                String email=editTextEmail.getText().toString().trim();
                                FirebaseUser user=firebaseAuth.getCurrentUser();

                                String uid=user.getUid();
                                if(dataSnapshot.child("USER").child("user_info").child(uid).exists()){
                                    Toast.makeText(JoinActivity.this,"already exist",Toast.LENGTH_SHORT).show();
                                }else{


                                                   User user_info = new User(uid, editTextId.getText().toString(), editTextEmail.getText().toString(), editTextPassword.getText().toString(),
                                                           editTextname.getText().toString(), editTextNickname.getText().toString(), editTextPhone.getText().toString());

                                                   //delete all data
                                                    mDatabase.setValue(null);
                                                   String key = mDatabase.child("USER").push().getKey();
                                                 //  mDatabase.child("USER").child("user_info").child(key).setValue(user_info);
                                                   Toast.makeText(JoinActivity.this, "save the data", Toast.LENGTH_SHORT).show();
                                               }
                                }

                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {

                            }
                        });
                        Intent intent = new Intent(JoinActivity.this, MainActivity.class);
                        startActivity(intent);

                    } else {  //already exists
                        Toast.makeText(JoinActivity.this, "already exists", Toast.LENGTH_SHORT).show();
                        return;
                    }
                }

            });
}

}

1 Ответ

1 голос
/ 28 мая 2020

Вместо:

mDatabase.addValueEventListener(new ValueEventListener() {

Используйте следующее:

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {

Таким образом вы получите данные только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...