为什么firebase的addValueEventListener的onDataChange方法中的ArrayList不为null,但是outisde为null?

时间:2018-05-02 01:19:44

标签: java android firebase

在我的项目中,我从Firebase读取数据并在Arraylist<object>中添加了我的数据。

我在oncreate()中创建Arraylist并在onDataChange()中使用它。

onDataChange的{​​{1}}方法中,ArrayList不为空,它可以正确读取。但在它之外读取0(null)。那是为什么?

我的代码:

addValueEventListener

2 个答案:

答案 0 :(得分:1)

Firebase数据库客户端从主线程执行所有网络和磁盘操作。

Firebase数据库客户端调用主线程上代码的所有回调。

因此,onDataChange()几乎总是在其他基于主要(UI)线程的方法(如onCreate(),onStart()之后)触发...因为onDataChange()依赖于设备的Internet速度。实际上,您看到的null值在首次记录或调用时为null,但在您看到布局上填充的值时不为null。

答案 1 :(得分:0)

addValueEventListener()是异步的,这意味着它会立即返回给调用者,而Firebase SDK会在您的代码继续执行时向服务器发出请求。您传递给它的回调会在一段时间后发生,请求完成后发生。你不知道这将会持续多长时间,你不应该对此作出任何假设。现在,您的代码假设在添加侦听器后结果立即可用,并且这些结果无效。

如果您想获得侦听器的结果,则只应在侦听器中执行此操作。在此之前,您无法预期结果可用。

如果您想了解更多有关Firebase API异步的原因,请read this blog