2017-03-09 8 views
2
public boolean checkGold(final int gold){ 
    mRef.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      String value = dataSnapshot.getValue(String.class); 
      goldparse = Integer.parseInt(value); 
      if (gold > goldparse){ 
       /*Return*/ 
      } 
     } 
     @Override 
     public void onCancelled(FirebaseError firebaseError) { 

     } 
    }); 
    return false; 
} 

私は外で金をチェックする方法がありますが、方法onDataChangeではfalseを返す方法があります。ありがとう。Android - 返すブール値の相対Firebase

+1

残念ながら、あなたはそれを行うことはできません。別の方法は、カスタム関数を作成し、 'onDataChange() 'から呼び出すことです。 – koceeng

+0

ところで、提供するコードサンプルは常にfalseを返すでしょうか? – koceeng

+0

私に例を教えてもらえますか?ありがとうございました –

答えて

1

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 
    } 
} 

それはに時間を必要としますこれに精通しているが、それはそれの価値がある。これが役立つことを願っています

関連する問題