DataSnapshot值是否有空值?

时间:2017-01-06 19:15:56

标签: android firebase firebase-realtime-database

我正在回答this question然后我想到了这个新问题。

在那个问题中,我描述了我的示例代码:

boolean firstCallDone = false;
boolean secondCallDone = false;

DataSnapshot firstDataSnapshot = null;
DataSnapshot secondDataSnapshot = null;

onCreate() {
    firstRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            firstCallDone = true;
            firstDataSnapshot = dataSnapshot;

            if (firsCallDone && secondCallDone)
                doSomething();
        }
        ...
    }
    secondRef.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            secondCallDone = true;
            secondDataSnapshot = dataSnapshot;

            if (firsCallDone && secondCallDone)
                doSomething();
        }
        ...
    }
}

doSomething() {
    // do something with firstDataSnapshot and secondDataSnapshot
    ...
}

上述代码的目的是在调用两个Firebase数据库并获取其值后执行doSometing()

然后我意识到,我可以像if (firsCallDone && secondCallDone)一样验证它,而不是像if (firstDataSnapshot != null && secondDataSnapshot != null)那样进行验证。这是因为据我所知,DataSnapshot 从不 null(在onDataChange()内填充其值之后)。

但我不确定。在onDataChange()内DataSnapshot是否有可能为null?如果有的话,那会是什么情况呢?

2 个答案:

答案 0 :(得分:2)

DataSnapshot永远不能为null,无论是否有数据(因为如果没有数据,你将得到一个空的但非空的DataSnapshot)。

答案 1 :(得分:1)

不,DataSnapshot值永远不会是null

如果发生任何故障,将触发onCancelled()方法。

顺便说一下,您应该利用Tasks API来管理这些任务,而不是创建标志以确保每个侦听器都已完成。 This answer from a Firebaser解释了这一点,并为此提供了一个类。

干杯:)