无法获得Firebase中null以外的child的值

时间:2019-02-07 03:07:32

标签: java android firebase firebase-realtime-database

不知道为什么,但是使用我的代码,我似乎无法获得'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'值吗?

2 个答案:

答案 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) {

}
});