我在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个数据成员年龄,名称。
用户类如下:
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());
}
});
我正在尝试获取年龄和姓名,并将其显示在我拥有的TextView
上。
但我得到的输出是
user.age=0 and user.name=null.
我想获取内部存在的所有数据:
fieldglass-aeca7
......
fieldglass-aeca7
这个关键值。
我希望显示上述路径中的所有数据。我怎么能得到它?
答案 0 :(得分:2)
我认为,收到的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>
,因此没有更改只是循环。