我正在从Firebase数据库中读取一些数据,但它返回的对象为null

时间:2017-10-07 18:37:18

标签: java android firebase firebase-realtime-database

这是我的firebase结构 Fire Base Structure

我正在尝试从firebase获取电话值,但它正在提供空值​​。

  

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

 //getting user id value
    SharedPreferences settings = getSharedPreferences("myapp", MODE_PRIVATE);


    // Reading from SharedPreferences

    String uid = settings.getString("uid", "");
    userId = uid;
    mFirebaseDatabase.child("users").child(userId).child("phone").addValueEventListener(new ValueEventListener() {
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            phone = dataSnapshot.getValue(String.class);
            Log.d(TAG, "Value is: " +phone);

        }

        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w(TAG, "Failed to read value.", error.toException());
        }

    });

textview.setText(phone);

请给出一些建议,我不知道为什么它会返回null 感谢

1 个答案:

答案 0 :(得分:0)

您的错误在这里:

string uid = settings.getString("uid","")

您正在使用随机键推送值,而您的代码无法找到该键,这就是为什么它会给null

的原因

解决方案: 在将值推入数据库而不是推入的代码中,只需使用

FirebaseDatabase.getInstance().getReference("Users")
.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(your value model class variable) 

现在,在获取代码中,只需将uid替换为

FirebaseAuth.getInstance().getCurrentUser().getUid()