Firebase数据库返回布尔值nullPointerExeption

时间:2018-04-01 23:10:36

标签: java android firebase firebase-realtime-database

iv一直致力于使用firebase数据库的新应用程序,其中存储了几个布尔值。 important_job并洗了

 "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"
}

我试图通过使用此方法在我的应用中调用这些布尔值

 public Harrop_JobListener(View relativeLayout) {
    this.relativeLayout = relativeLayout;
}

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot valueSnapshot: dataSnapshot.getChildren()){
        a = valueSnapshot.child("important_job").getValue(Boolean.class)

    }
}

@Override
public void onCancelled(DatabaseError databaseError) {
    throw databaseError.toException();
}
}

然后我在我的复选框类中使用public Boolean,如下所示

 harrop_jobListener = new Harrop_JobListener(myLayout);
    dbref.addValueEventListener(harrop_jobListener);

 cb1 = (CheckBox) myLayout.findViewById(R.id.cbimportant);
  cb1.setChecked(harrop_jobListener.a);


    cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if (cb1.isChecked()) {
                dbref.child("important_job").setValue(true);
            } else {
                dbref.child("important_job").setValue(false);
            }
        }
    });

但由于某种原因,我一直在我的logcat

中收到此错误
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
                                                                                          at studios.p9p.harrop99.provaletercompanion.Checkbox_Helper.getCheckBoxes(Checkbox_Helper.java:54)
                                                                                          at studios.p9p.harrop99.provaletercompanion.HarropChildListener$1.onItemClick(HarropChildListener.java:100)

我已经检查过使用

获取正确的密钥和值
 System.out.println(valueSnapshot.getKey());
   System.out.println(valueSnapshot.getValue(Boolean.class))

返回正确的结果。所以我很困惑,我的错误再次lol欢呼

编辑****

这是我的dbref

 dbref = db.getReference().child(registration).child(registration).child("Current_job");

注册孩子=当时用户将要使用的汽车

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你应该将这个db子句的默认值设置为布尔值,从你的问题来看,似乎在检查数据库的更新时,它不会及时检索新的值。为防止错误发生,请设置此默认值并告诉我们是否继续。我的应用程序曾经发生类似的考验。