【问题标题】:Read a particular child value from firebase database从 firebase 数据库中读取特定的子值
【发布时间】:2026-01-29 01:55:01
【问题描述】:

我正在尝试从我的 firebase 实时数据库中检索孩子的值(电话号码)。但是它给了我以下错误:

尝试调用虚方法 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.child(java.lang.String)' 在空对象引用上

我的数据库结构如下:

contactsfirebase-16ade
  users
    -LiKtfTuDQm7LmY49t69
      email: "devsingh0@gmail.com"
      name: "dev"
      phone: "2327272"

代码

DatabaseReference databaseReference;
databaseReference.child("users").child("userID").child("phone").addListenerForSingleValueEvent(new ValueEventListener()
{
   @Override
   public void onDataChange(@NonNull DataSnapshot dataSnapshot) 
    {
     String phone = dataSnapshot.getValue().toString();

     Phone.setText(phone);
     Phone.getDisplay();
    }
}

Read child value from firebase

我希望在我的应用程序的 textview Phone 中显示值“2327272”。但是,当我单击该按钮时,它会给出上面共享的错误并且应用程序崩溃。

【问题讨论】:

  • 你能发布你的电话课程吗?
  • 请仅使用android-studio 标签来回答有关 Android Studio IDE 本身的问题。对于一般的 Android 编程问题,请使用android 标签。
  • @FrankvanPuffelen 好的,下次我会记住这一点

标签: android firebase firebase-realtime-database


【解决方案1】:

您的DatabaseReference databaseReference; 未初始化

这样做

DatabaseReference databaseReference; 
databaseReference = FirebaseDatabase.getInstance().getReference();
databaseReference.child("users").child("userID").child("phone").addListenerForSingleValueEvent...

【讨论】:

  • 感谢您的回复。我试过这个但是它仍然给出同样的错误。我没有“电话”类,但电话是用户类中的字符串值。我正在尝试在 ID 为“Phone”的文本视图中检索此值。我错过了什么吗?
  • 当您调用 Phone.setText 时,您的活动中是否有文本视图?它应该有一个小写的名字
【解决方案2】:

你可以试试这个方法:

 @Override
        protected void onStart() {
            super.onStart();
            final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
//if you retrive the Uid inside of oncreate method you can call it else you have to retrive the Uid
            DatabaseReference veera = rootRef.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid();
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.child("phone").exits()){
                       String phone = dataSnapshot.getValue().toString();
                        Phone.setText(phone);
                  }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            };
            veera.addValueEventListener(eventListener);

        }

如果您在按钮下单击,只需将其移至公共方法并在 onclicklistener 中调用该方法。

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
          //here
      }
      }

【讨论】: