2017-03-09 48 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 
    } 
} 

它需要時間熟悉這一點,但它是值得的。希望這可以幫助