Jvm 未完成从未调用

Jvm 未完成从未调用,jvm,firebase,nest-api,Jvm,Firebase,Nest Api,Nest Firebase实现的工作方式似乎与演示Firebase数据库不同。特别是,使用JVM客户机,永远不会调用我的完成侦听器。我找到了一些功能正常工作的示例代码: public class Demo { static Firebase ref; public static void main(String[] args) throws Exception { ref = new Firebase("https://testjava.firebaseio-d

Nest Firebase实现的工作方式似乎与演示Firebase数据库不同。特别是,使用JVM客户机,永远不会调用我的完成侦听器。我找到了一些功能正常工作的示例代码:

public class Demo {
    static Firebase ref;

    public static void main(String[] args) throws Exception {
        ref = new Firebase("https://testjava.firebaseio-demo.com/");
        ref.addValueEventListener(new Listener());

        ref.setValue(new Date().toString(), new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                System.out.println(System.currentTimeMillis() + " Done");
            }
        });

        Thread.sleep(5000);
    }

    static class Listener implements ValueEventListener {
        @Override
        public void onCancelled(FirebaseError e) {}

        @Override
        public void onDataChange(DataSnapshot ds) {
            System.out.println("*** Data change: " + ds.getValue());
        }
    }
}
针对嵌套API的类似代码不起作用

public class Demo2 {
    static String path = "/devices/thermostats/zSTIETF037xWx7gRrVeQ2tsHz2-KbKez/name";

    static Firebase ref;

    public static void main(String[] args) throws Exception {
        ref = new Firebase("wss://developer-api.nest.com");
        ref.authWithCustomToken(authCode, null);
        ref.addValueEventListener(new Listener());

        ref.child(path).setValue("Hallway 3", new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                System.out.println("onComplete");
            }
        });

        Thread.sleep(5000);
    }

    static class Listener implements ValueEventListener {
        @Override
        public void onCancelled(FirebaseError e) {}

        @Override
        public void onDataChange(DataSnapshot ds) {
            System.out.println("*** Data change: " + ds.getValue());
        }
    }
}
无论睡眠时间有多长,“完成”一词永远不会被写出来。此外,当检查路径时,该值未更改。为什么这样不行


请注意,当添加侦听器的代码被注释掉时,它确实起作用

另一个有趣的问题是,有时在模拟器UI中所做的更改并不适用。例如,如果我更改模式,它将在几秒钟后返回到以前的值。结果表明,这与向引用添加值事件侦听器有关。我已经更新了Demo2代码,以反映Firebase是否在线?网络打开了吗?是的,是的。另外一个有趣的问题是,有时在模拟器用户界面中所做的更改不起作用。例如,如果我更改模式,它将在几秒钟后返回到以前的值。结果表明,这与向引用添加值事件侦听器有关。我已经更新了Demo2代码,以反映Firebase是否在线?网络打开了吗?是的,是的。否则就会有错误。