有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Firebase与java(非Android)一起检索信息

我一直在尝试使用java代码(非安卓)获取firebase数据库的数据。我使用了和我在安卓应用程序中检索到的相同的方法。但它并没有得到数据

    Firebase firebase = new Firebase("https://------.firebaseIO.com");
    firebase.addValueEventListener(new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot ds) {
            long i = ds.child("Users").getChildrenCount();
            userlist = new String[(int)i];
            int j = 0;
            for( DataSnapshot each_ds : ds.getChildren() ){
                userlist[j] = each_ds.child("username").getValue().toString();
                System.out.println(userlist[j]);
                j++;
            }
        }

        @Override
        public void onCancelled(FirebaseError fe) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    });

共 (1) 个答案

  1. # 1 楼答案

    Firebase客户端在一个单独的线程中与服务器建立连接,并开始侦听那里的数据。当没有更多代码可执行时,程序的主线程将继续并退出,这通常发生在Firebase返回其第一个数据之前(可能需要几秒钟)

    因此,您必须等待数据返回。对于测试程序,我通常在程序末尾插入一个简单的Thread.sleep()

    Thread.sleep(20000);
    

    但是在一个实际的程序中,你可能想找出一个更好的退出条件。例如,这里我们使用CountDownLatch使主代码等待操作完成:

    final CountDownLatch sync = new CountDownLatch(1);
    ref.push().setValue("new value")
       .addOnCompleteListener(new OnCompleteListener<Void>() {
          public void onComplete(Task<Void> task) {
            sync.countDown();
          }
        });
    sync.await();
    

    顺便说一下,不要在Android中使用这种方法,因为它会阻塞主/UI线程,使应用程序没有响应