简体   繁体   English

firebase 实时数据库推送无限循环错误

[英]firebase realtime database push infinite loop error

I'm using firebase authentication with email and password.我正在使用 firebase 身份验证和 email 和密码。

So I want to save user data in realtime database.所以我想将用户数据保存在实时数据库中。 But when i push the data to database, infinite loop was executing.但是当我将数据推送到数据库时,正在执行无限循环。

I don't know why.. I want to save data like this form and continue saving.我不知道为什么..我想保存这种形式的数据并继续保存。

But when I starting, infinite loop is starting但是当我开始时,无限循环正在开始

在此处输入图像描述

       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;
                    }
                }

            });
}

} }

Instead of:代替:

mDatabase.addValueEventListener(new ValueEventListener() {

Use the following:使用以下内容:

mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {

This way you will retrieve data only once.这样,您将只检索一次数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM