我一直在尝试使用 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 取回第一个数据之前(可能需要几秒钟)。
所以你必须等待数据返回。对于测试程序,我通常通过插入一个简单的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 线程并使应用程序无响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)