【问题标题】:Java async update from Firebase eventlistener来自 Firebase 事件监听器的 Java 异步更新
【发布时间】:2018-11-08 04:04:01
【问题描述】:

我有一段代码通过返回 Firebase 查询来更新变量。在本节之外,我引用该变量并打印它。

但是,它似乎作为异步操作执行,并在变量输入任何值之前打印出变量,所以我不断收到nulladdListenerForSingleValueEventon complete 吗?

public Map<String, String> childKV;
public Map<String, Object> allChildren;
public getChild() {
    allChildren = new HashMap<>();
    DatabaseReference dbRef = fb.child("inventory");
    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot snapshot) {
            for (DataSnapshot childSnap : snapshot.getChildren() {
                childKV = new HashMap<>();
                childKV.put(
                    childSnap.getKey(),childSnap.getValue()
                );
                allChildren.put(childSnap.getKey(), childKV);
            }
        }
        @Override
        ...
    };
    dbRef.orderByKey().addListenerForSingleValueEvent(listener);
    dbRef.removeEventListener(listener);
    printChildren(allChildren);
}
public void printChildren(Map<String,Object>) {...}

编辑:

类似于Update value of variable from Firebase query?,但用于 Java。这是否意味着我必须使用反射?

【问题讨论】:

    标签: java firebase firebase-realtime-database nosql


    【解决方案1】:

    确实,eventListeners 具有异步行为,因此您已经正确理解了您的问题。

    不幸的是,我的解决方案是您可能因此不得不改变您的方法。因此,您应该采用事件驱动的方法。因此,我不会“等待数据到来,然后做我的事”,而是“当数据进来时,做我的事”。

    根据您的问题的意思,在您的singleValueEventListeneronDataChange() 方法中打印值,这将确保您不会得到 null 并且您可以正确检索您的值。

    除此之外,我在搜索时发现的另一种方法是Task.await()。我不会指望它,但你可以在这里阅读更多相关信息:

    StackOverflow Question

    StackOverflow Answer

    【讨论】:

    • 我的 onDataChange() 被每个子记录(相当于 csv 中的一行)触发。但是它只会一遍又一遍地写一行到csv。我想把返回值放到一个地图上,然后写出来。但是,如果我使用map.put(snapshot.getValue()),并将写入放在最后,它只会写入空值。 p.s.这是被 ApiFuture 弃用的 Task 吗?
    • 对不起,我没有从你的代码中得到你想要做什么,如果你能提供你的数据库结构并告诉你想要做什么,我可能会提供更多帮助:)
    • @IshouldchangemyUsername 如果您发现我的答案有用,请考虑投票并将其标记为正确,我将不胜感激。干杯! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多