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
私に例を教えてもらえますか?ありがとうございました –