【问题标题】:Android - Return boolean value relative FirebaseAndroid - 返回相对于 Firebase 的布尔值
【发布时间】:2017-03-09 08:59:43
【问题描述】:
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。谢谢。

【问题讨论】:

  • 很遗憾,您不能这样做。另一种方法是创建自定义函数并从内部调用它onDataChange()
  • 对了,你提供的代码示例总是会返回false,不是吗?
  • 你能举个例子吗?谢谢
  • 是的,如果输入值较小,我想将输入值(黄金)与 firebase 数据库中的黄金进行比较,以减去黄金。 => 返回真。反之亦然返回 false

标签: android firebase firebase-realtime-database boolean


【解决方案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
}

但如果我们知道它是异步的,它应该是这样的:

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

熟悉这一点需要时间,但这是值得的。希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2018-01-24
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多