用java(非android)的Firebase检索信息

我一直在尝试使用java代码(非android)来获取我的firebase数据库的数据。 我用同样的方法,我在android应用程序中检索。 但它没有获取数据。

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获取第一个数据(可能需要几秒钟)之前。

所以你必须等待数据回来。 对于testing程序,我通常在程序的最后插入一个简单的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线程并使应用程序无响应。