不知道为什么,但是使用我的代码,我似乎无法获得'isOnline'的值:
Setting up bind9 (1:9.9.5.dfsg-9+deb8u16) ...
dpkg: error processing package bind9 (--configure):
subprocess installed post-installation script returned error exit status 102
Errors were encountered while processing:
bind9
E: Sub-process /usr/bin/dpkg returned an error code (1)
以下是我的Firebase数据库的一部分:
root@rpi:/etc/bind# ls -1
bind.keys
db.0
db.127
db.255
db.empty
db.local
db.root
named.conf
named.conf.default-zones
named.conf.local
named.conf.options
rndc.key
zones.rfc1918
有人知道为什么我不能获得null以外的'isOnline'值吗?
答案 0 :(得分:1)
我认为您正在将侦听器嵌套到比所需深度更深的级别。
DatabaseReference iosRef = FirebaseDatabase.getInstance().getReference("DriversOnline/iosDriver");
iosRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot driverSnapshot: dataSnapshot.getChildren()) {
String driverid = driverSnapshot.getKey();
DataSnapshot isOnlineSnapshot = driverSnapshot.child("isOnline");
System.out.println(isOnlineSnapshot.getValue(String.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
一些注意事项:
dolRef
的变量重新分配4次是一种代码气味。这使得跟踪正在发生的事情以及检查变量是否指向正确的位置变得更加困难。像我上面所做的那样,给他们每个人清楚地指出他们指向的名字。isOnline
的值就在driverSnapshot
中,因此不需要附加第二个侦听器。您可以只请求具有正确名称的子快照,然后从中获取值。答案 1 :(得分:0)
driverid = FirebaseDatabase.getInstance().getReference("driver");//If there is another driver table, the path must be two layers.
driverid.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Driver driver = dataSnapshot.getValue(Driver.class);//class model
dolRef = FirebaseDatabase.getInstance().getReference("DriversOnline/iosDriver").child(driver.getDriverID);
dolRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
DriversOnline driversOnline= dataSnapshot.getValue(DriversOnline .class);//class model
log.d("driverid","isOnline :"+driversOnline.getisOnline)
//display -> isOnline : true
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});