大家好我在使用firebase数据库来存储一些类似于此的布尔值的应用
"TEST" : {
"TEST" : {
"Current_job" : {
"important_job" : true,
"washed" : true
},
"colour" : "test",
"date" : "test",
"doors" : "test",
"enginesize" : "test",
"fuel" : "test",
"lotnumber" : "test",
"manufacturer" : "test",
"model" : "test",
"reg" : "TEST"
}
我在我的应用程序中使用复选框激活它们。勾选复选框后,它将Boolean true推送到我的数据库。并且没有勾选。
id喜欢在另一个活动中调用这些布尔值,并以与使用共享首选项类似的方式使用它们。
所以我从弗兰克斯的答案复制下面,但我得到一个空指针错误,你们帮助
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot valueSnapshot: dataSnapshot.getChildren()){
Boolean a,b,c,d;
a = valueSnapshot.child("important_job").getValue(Boolean.class);
这是空指针错误
的地方 if (a){
CheckBox cb1 = (CheckBox)relativeLayout.findViewById(R.id.cbimportant);
cb1.setChecked(true);
}else{
CheckBox cb1 = (CheckBox)relativeLayout.findViewById(R.id.cbimportant);
cb1.setChecked(false);
}
}
}
答案 0 :(得分:1)
数组是一种非常具体的数据结构。例如,您拥有的三个名称的数组将在JSON / Firebase中以这样的方式存储:
["washed", "polished", "waxed"]
您可能已经注意到,这意味着您已经丢失了布尔值。这是因为数组中的元素是未命名的。
您展示的内容更可能是所谓的关联地图,或者只是键值对。在JSON / Firebase中存储的内容如下:
{
"washed": true,
"polished": false,
"waxed": false
}
无论哪种方式,如果您显示实际的JSON(如文本,没有屏幕截图),它会更容易帮助。您可以通过单击"导出JSON"来实现此目的。您Firebase Database console中的链接。
如果您希望同时获取密钥和值,请将侦听器附加到其上方的节点,并循环遍历快照的子节点,如下所示:
Database currentJobRef = FirebaseDatabase.getInstance().getReference("CurrentJob");
currentJobRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot valueSnapshot: dataSnapshot.getChildren()) {
System.out.println(valueSnapshot.getKey()); // prints "washed", "published", "waxed"
System.out.println(valueSnapshot.getValue(Boolean.class)); prints true, false, false
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});