Firebase數據庫是異步的,它的流量超出了我們通常所做的正常流量。 In this post,我試圖解釋一下(僅供參考)
而在這種情況下,你做這樣的事情吧?
boolean iWantValue = checkGold(10);
if (iWantValue) {
// do someting
} else {
// do something else
}
...
public boolean checkGold(final int gold) {
... // content here are still the same as mentioned in question
}
但是,如果我們知道它是asyncronous,它應該是這樣的:
int currentGold = 0; // place gold here so it can be accessed anywhere
...
// wherever you want to check gold, type this
currentGold = 10; // update this value first, right?
checkGold();
...
public void checkGold() {
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
goldparse = Integer.parseInt(value);
if (currentGold > goldparse){
// do something
} else {
// do something here
}
}
...
});
}
或者,如果你像我一樣誰想要的東西整齊:
public void checkGold() {
mRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
doSomethingOrNot(Integer.parseInt(dataSnapshot.getValue(String.class)));
}
...
});
}
private void doSomethingOrNot(int goldparse) {
if (currentGold > goldparse){
// do something
} else {
// do something here
}
}
它需要時間熟悉這一點,但它是值得的。希望這可以幫助
不幸的是,你不能這樣做。另一種方法是創建自定義函數並從'onDataChange()' – koceeng
中調用它順便說一句,您提供的代碼示例將始終返回false,不是嗎? – koceeng
你能舉個例子嗎?謝謝 –