无法从Firebase数据库DataSnapshot中获得价值

时间:2018-06-21 12:14:13

标签: android firebase firebase-realtime-database

我已经读过很多关于这个问题的答案,没有一个能解决我的问题。

    ValueEventListener dataListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                DataSnapshot ls = ds.child("/leafBox001");
                DataSnapshot cs = ls.child("/currentState");
                Log.i(TAG, "msg " + cs + ls + ds);
            }

日志返回以下内容:

DataSnapshot {键= leafBox001,值= {lightSensor = 6793,currentState = false}}

DataSnapshot {键= currentState,值= null}

DataSnapshot {键= leafBox001,值= null}

如您所见,当我尝试访问一个孩子时,值变为空。

使用getValue时,我也总是会得到null。该代码示例:

    ValueEventListener dataListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                currentState = ds.child("/leafBox001").child("/currentState").getValue(Boolean.class);
                Log.i(TAG, "msg " + cs + ls + ds);
            }

我尝试了上述代码的所有变体,始终为null。

RTD结构

enter image description here

1 个答案:

答案 0 :(得分:1)

您的数据库结构如下:

 leafBox001
      lightSensor:6793
      currentState: false

然后执行以下操作:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("leafBox001");

reference.addListenerForSingleValueEvent(new ValueEventListener() {
 @Override
public void onDataChange(DataSnapshot dataSnapshot) {
      String sensor = dataSnapshot.child("lightSensor").getValue().toString();
      String currentState = dataSnapshot.child("currentState").getValue().toString();

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

快照位于密钥leafBox001上,您将可以访问该密钥的子项。