我试图了解此方法的工作原理。我已经完成了所有设置,并将一些字符串推送到我的firebase的根目录。我引用了我的firebase,然后我尝试以这种方式创建一个Query对象
Query refQ = ref.orderByValue().equalTo(word);
其中word是我推送到firebase的相同字符串。
我只想将该值打印到控制台。 发生的奇怪事情是控制台像无限循环一样挂起,我需要强制它终止。我在上面的代码行之后放了一个print语句,它永远不会到达。
所以我的问题是,我做错了什么?
编辑:我忘了提及word
是静态的,其中一个是我推送到firebase的。我这样做是为了测试功能。
答案 0 :(得分:1)
我创建了这个最小的样本,并在JDK 1.8.0_31中运行它:
public static void main(String[] args) throws Exception {
Firebase ref = new Firebase("https://stackoverflow.firebaseio.com/29553461");
/*
Map<String,Object> map = new HashMap<String, Object>();
map.put("puf", "Frank van Puffelen");
map.put("frank", "Frank van Puffelen");
map.put("david", "David East");
map.put("east", "David East");
ref.setValue(map);
*/
Query refQ = ref.orderByValue().equalTo("Frank van Puffelen");
refQ.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
System.out.println("Child added: "+dataSnapshot.getKey()+": "+dataSnapshot.getValue());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) { }
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) { }
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) { }
@Override
public void onCancelled(FirebaseError firebaseError) { }
});
Console console = System.console();
if (console != null) {
console.format("Press ENTER to process.\n");
console.readLine();
}
else {
System.out.println("Sleeping for 5 seconds, in hopes that everything is done by then.");
Thread.sleep(5000);
}
}
打印出来:
Child added: frank: Frank van Puffelen
Child added: puf: Frank van Puffelen
所以它对我来说似乎很好。