用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线程并使应用程序无响应。
- 如何使用Firebase Cloud Messaging将设备发送到设备消息?
- 是否可以使用Firebase云消息传递(FCM)直接从设备发送PushNotifications到特殊的UDID?
- Firebase消息传递,从哪里获得服务器密钥?
- Android Firebase,只需获取一个子对象的数据
- 如何在Firebase中的后台应用中处理通知
- FIRInstanceID /警告停止! 将从内存中重置设备ID
- Firebase:设置其他用户属性
- Android – Firebase – TaskSnapshot – 只能在私人范围内访问方法?
- Cloud Firestore和Firebase实时数据库有什么区别?