我想从我的 Firebase 实时数据库中获取我的 wgID,它的值是 /WG/FlatNumber/ 现在这是我的代码:
主要活动:
System.out.println("1");
dbContact.schreibeFlatObjekt();
System.out.println("7");
schreibeFlat 对象:
//wgID is global
private String wgID;
public schreibeFlatObjekt(){
//CountDownLatch to wait for the Listener
final CountDownLatch cdl = new CountDownLatch(1);
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println("3");
//Getting the Data from the snapshot
wgID = (String) dataSnapshot.getValue();
System.out.println("4 wgID: " + wgID);
//counting down the cdl so the cdl.await() can go on
cdl.countDown();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
System.out.println("2");
fref.child("WG").child("FlatNumber").addListenerForSingleValueEvent(listener);
System.out.println("5");
try{
cdl.await();
}
catch(Exception e)
{
System.out.println(e.toString());
}
System.out.println("6 wgID: " +wgID);
return 0;
所以当我不使用 CountdownLatch 时,System.out.println
给我这个:
I/System.out: 1
I/System.out: 2
I/System.out: 5
I/System.out: 6 wgID: null
I/System.out: 7
I/System.out: 3
I/System.out: 4 wgID: 1
所以正如我所看到的,在方法已经准备好之后,监听器被执行。
如果我使用 CountDownLatch,它只会运行到“cdl.await()”,然后停止,监听器永远不会执行,应用程序也会停止。
那么如何获取我的 ID,我的意思是我只想要我的数据库中的一个值,你可以用“setValue()”设置它,但你不能用“getValue”之类的东西来读取它,它必须由侦听器完成?