java - 我想从 firebase 检索当前用户的 ID 并将其写入另一个节点,但它只是不断拒绝

标签 java android firebase firebase-realtime-database

所以基本上我创建了一个字符串mojID,它等于firebase的当前用户,我想将它作为节点中的子节点传递,但它说它是一个空指针异常,我已经使用过它位于不返回错误的代码的其他部分。

我附上了一些代码。

final DatabaseReference chatRef1 = FirebaseDatabase.getInstance().getReference("ChatLista");
    chatRef1.child(mojID);
    chatRef1.child(userID);
    chatRef1.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(!dataSnapshot.exists()){
                chatRef1.child("id").setValue(userID);

            }
        }

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

        }
    });

    final DatabaseReference chatRef2 = FirebaseDatabase.getInstance().getReference("ChatLista");

                chatRef2.child(userID);
                chatRef2.child(mojID);

            chatRef2.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if(!dataSnapshot.exists()){

                chatRef2.child("id").setValue(mojID);

            }
        }

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

        }
    }); 

然后是获取 ID 的函数:

private void ProvjeriStatus(){
    FirebaseUser user = firebaseAuth.getCurrentUser();
    if(user!=null){
        //user ulogovan
        mojID = (String)user.getUid();
    }
    //ako nije vraca na login
    else {
       startActivity(new Intent(this,login.class));
       finish();
    }
}

我什至尝试对其进行强制转换,如您所见,它只是说我不需要强制转换,因为它已经是一个字符串?那为什么会返回null呢?我想到的唯一解释是它是一个对象而不是字符串,因此 .child 希望将字符串作为参数而不是对象。

最佳答案

您可以通过FirebaseUser添加UserId..您可以引用下面的代码..也许会有帮助 你

 FirebaseUser currentFirebaseUser;
 DatabaseReference databaseReference;

 currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser();
 databaseReference = FirebaseDatabase.getInstance().getReference();

 databaseReference.child("Users").child(currentFirebaseUser.getUid()).child("User 
 Id").setValue(currentFirebaseUser.getUid());

如果你想从数据库中检索UserId请引用下面的代码..

DatabaseReference myRef = database.getReference("Users");

myRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if ((dataSnapshot.child(currentFirebaseUser.getUid()).child("UserId").getValue() == null)) {
                databaseReference.child("Users").child(currentFirebaseUser.getUid())
                        .child("UserId").setValue(currentFirebaseUser.getUid());
            } else {
                String Id= (String) dataSnapshot.child(currentFirebaseUser.getUid()).child("UserId").getValue();

            }

关于java - 我想从 firebase 检索当前用户的 ID 并将其写入另一个节点,但它只是不断拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59473493/

相关文章:

java - 是否可以在 firebase 上仅更新我 child 的特定数据?

javascript - Firebase:数据库引用 'on' 方法未运行回调 (javascript)

java - Android Firebase 查询问题

java - 分配和格式化的首选选项是什么?

java - Spring 安全: Unable to autowired DAO in the UserDetailsService class

Android - 如何在 EditText 上制作 2 个提示?

android - 在绝对布局中设置图像位置

java - 如何获取泛型类的类引用

java - 提取两个字符串之间的字符串,其中第二个字符串可能存在也可能不存在

java - android ble setValue 是 0x00010000