Firebase与java(非android)检索信息



我一直在尝试使用java代码(非android)为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.
        }
    });

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线程,使应用程序没有响应。

最新更新