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) たぶんFirebaseAuthentication.currentUserがまだ初期化されていない

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

これは、プッシュIDを持つ子をuidノード内に生成します。私はそれがOPが望んでいるとは思わない。 –

+0

その後、.push()の代わりに.set()を使用してください。 –

0

へ。おそらく

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

あなたに問題:失敗の理由が何であるかを見るためにあなたの完了リスナーの

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

更新onComplete():それはonCompleteメソッドにパラメータとして渡されたタスクからのUID取得してみてくださいデータベースセキュリティルール

0

実際、Firebaseへの接続で問題が発生しました。私はFirebaseと同じアカウントでアンドロイドスタジオにログインしていなかったので、なぜFirebaseと通信できなかったのですか。

関連する問題