【问题标题】:Retrieving data from Firebase database is returning null values从 Firebase 数据库中检索数据返回空值
【发布时间】:2017-04-03 20:01:38
【问题描述】:

我在 Firebase 中创建了一个数据库,其规则如下:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

而我的数据库是以这样的 JSON 数据形式显示的:

fieldglass-aeca7
 0 
   age: 23
   name:"shikher"
 1
  age:24
  name:"samarth"

fieldglass-aeca7
  -KWm_3CF1pSVtuy9nhFF
      age:12
      name:"shikhermishra"
  -KWmaVs4frXpS_1lVhcj
      age:13
      name: "Shiker"

现在我已经编写了一个代码来从数据库中读取数据。还有一个 User 类,它有 2 个数据成员 age,name。

用户类如下:

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;




public class User {

public int age;
 public String name;

 public User(){
 }
 public User(int age,String name)
 {
  this.name=name;
  this.age=age;
 }

 public void setAge(int age) {
  this.age = age;
 }

 public void setName(String name) {
  this.name = name;
 }


 public int getAge() {
  return age;
 }

 public String getName() {
  return name;
 }
}

而我的数据库获取代码是这样的:

FirebaseDatabase database=FirebaseDatabase.getInstance();
        DatabaseReference reference=database.getReference("fieldglass-aeca7");

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                User user=dataSnapshot.getValue(User.class);
                Log.d("user info---@@*******",String.valueOf(user.getAge()));



                assert tv != null;
                assert tv1 != null;
                tv.setText(String.valueOf(user.age));
                tv1.setText(user.name);


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                Log.d("The read failed",databaseError.getDetails());
            }
        });

我正在尝试获取年龄和姓名并将其显示在我拥有的 2 个TextViews 上。

但是我得到的输出是

user.age=0 and user.name=null.

我想获取里面存在的所有数据:

fieldglass-aeca7
......

   fieldglass-aeca7

这个键值。

我想要显示上述路径中的所有数据。我怎样才能得到它?

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    我认为,收到的DataSnapshot 就像一个数组,你必须先循环它的孩子。

    正确的场景可能是这样的:

    if (dataSnapshot.hasChildren())
    {
         for (DataSnapshot child : dataSnapshot.getChildren)
         {
              User user = child.getValue(User.class);
    
              // your actions here: 
              assert tv != null;
              assert tv1 != null;
              tv.setText(String.valueOf(user.age));
              tv1.setText(user.name);
    
          }
     }
    

    注意:dataSnapShot.getChildren 只返回Iterable<DataSnapshot>,因此没有变化只是循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2018-12-22
      相关资源
      最近更新 更多