我已经读过很多关于这个问题的答案,没有一个能解决我的问题。
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结构
答案 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
上,您将可以访问该密钥的子项。