如果您有通过某个类的main函数在命令行上调用的java程序,则必须阻止该main函数在数据库侦听器启动之前返回。否则,程序将立即终止,并且监听器将永远不会触发。重要的是要记住,所有Firebase侦听器都是异步的,并且Firebase管理其自己的守护程序线程以与服务器进行通信。
对于使一个简单的程序等待侦听器触发的情况,可以使用这种模式来阻止主线程等待侦听器:
CountDownLatch latch = new CountDownLatch(1);ref.addListenerForSinglevalueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { System.out.println("onDataChange: " + dataSnapshot); latch.countDown(); } @Override public void onCancelled(DatabaseError databaseError) { System.out.println("onCanceled: " + databaseError); latch.countDown(); }});latch.await();使用CountDownLatch不是唯一的选择。您可以执行任何您要确保进程不停止的操作,包括简单地将主线程休眠的时间长于侦听器触发的时间。



