0

Я создал узел с именем Users. Я хочу создать дочерний узел с именем Uid пользователя, который зарегистрируется и сохранит всю свою информацию профиля в этом дочернем узле.Невозможно добавить данные в базу данных Firebase

Это должно произойти только в том случае, если пользователь был успешно зарегистрирован в базе данных. Поэтому я использовал следующий код:

     mAuth.createUserWithEmailAndPassword(user.getEmail(), password) 
           .addOnCompleteListener(new OnCompleteListener<AuthResult>() { 
            @Override 
            public void onComplete(@NonNull Task<AuthResult> task) { 
             Log.d("MainActivity", "signIn:onComplete:" + task.isSuccessful()); 

             if (task.isSuccessful()) { 
              DatabaseReference userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
              userDatabaseReference.child(task.getResult().getUser().getUid()) 
                .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { 
               @Override 
               public void onComplete(@NonNull Task<Void> task) { 
                Toast.makeText(ResetPassword.this, "user registred to database", Toast.LENGTH_SHORT).show(); 
                Intent intent = new Intent(ResetPassword.this, MainActivity.class); 
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                startActivity(intent); 
               } 
              }); 

             } else { 
              Toast.makeText(ResetPassword.this, "Registration Failed", 
                Toast.LENGTH_SHORT).show(); 
             } 
            } 
           }); 

Но мой код не работает. Пользователь зарегистрирован успешно, но ни один ребенок не создается в базе данных. Который должен быть создан с именем Uid пользователя.

Когда я добавил контрольные точки, как показано здесь:

Я обнаружил, что компилятор идет непосредственно в линию 106 после линии не 82 без выполнения какой-либо линии между ними, но все же это вызывает MainActivity, который называется внутри сверху совершенно.

Я не понимаю, как это происходит. Заранее спасибо.

ответ

0

Изменить userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo) в

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).push().setValue(userInfo) 
+0

Это создаст дочерний элемент с идентификатором push внутри узла uid. Я не думаю, что это то, чего хочет OP. –

+0

Тогда просто используйте .set() вместо .push() –

0

Может быть FirebaseAuthentication.currentUser еще не инициализирован. Попробуйте получить это UID от задачи, которая передается в качестве параметра в onComplete метода:

if (task.isSuccessful()) { 
         userDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users"); 
         userDatabaseReference.child(task.getResult().getUser().getUid()).setValue(userInfo).addOnCompleteListener(new OnCompleteListener<Void>() { 
          @Override 
          public void onComplete(@NonNull Task<Void> task) { 
           Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
          } 
         }); 

        } 
0

Update onComplete() вашего завершения слушателю увидеть, что причина неудачи:

userDatabaseReference.child(mAuth.getCurrentUser().getUid()).setValue(userInfo) 
     .addOnCompleteListener(new OnCompleteListener<Void>() { 
    @Override 
    public void onComplete(@NonNull Task<Void> task) { 
     if (task.isSuccessful()) { 
      Toast.makeText(context, "user registred to database", Toast.LENGTH_SHORT).show(); 
     } else { 
      System.out.println("onComplete: " + task.getException().getMessage()); 
     } 
    } 
}); 

Возможно проблема с вашим правила безопасности базы данных.

0

На самом деле проблема была связана с подключением к Firebase. Я не вошел в андроид-студию с той же учетной записью, что и Firebase, поэтому у меня не было возможности общаться с Firebase.

Смежные вопросы