布尔和Firebase数据库

时间:2018-03-31 15:58:37

标签: java android firebase firebase-realtime-database boolean

大家好我在使用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);
        }
    }
}

1 个答案:

答案 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();
  }
});