【问题标题】:How to run a method when query is finishing?查询完成时如何运行方法?
【发布时间】:2016-11-20 00:56:45
【问题描述】:

我正在使用 Firebase。我的问题是,当我查询对象然后修改它们时,我的主 ui 线程继续运行并运行下一个方法。我希望我的主 ui 线程等到我的 firebase 查询完成并且我在 onDataChange 中进行了所有必要的更改,然后继续运行我编写的其他函数。

目前,我刚刚导入了外部库“Otto”,但不知道如何使用它,希望有人能帮助指导我。

                Firebase cardReference = mRef.child("reference");
                cardReference.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                    //DO STUFF
                    }
                    @Override
                    public void onCancelled(FirebaseError firebaseError) {

                    }
                });
               //Once STUFF is done, run nextMethod()
               nextMethod();
        }

【问题讨论】:

  • 编辑完东西后为什么不使用nextMethod()in onDataChange Otto 是用于操作的pub-sub。

标签: android multithreading firebase firebase-realtime-database otto


【解决方案1】:

Firebase 以异步方式从数据库中读取数据。如果不向用户显示“应用程序无响应”,则无法让您的应用等待。

相反,您需要重新构建您的逻辑。不要说“首先加载引用,然后执行下一个方法”,而是将其更改为“开始加载引用,完成后执行下一个方法”。在转换为的代码中:

Firebase cardReference = mRef.child("reference");
cardReference.addValueEventListener(new ValueEventListener() {
    public void onDataChange(DataSnapshot dataSnapshot) {
        // Whenever STUFF is done, run nextMethod()
        nextMethod();
    }
    public void onCancelled(FirebaseError firebaseError) {
        throw firebaseError.toException();
    }
});

这种方法的另一个优点是,现在每当参考数据发生变化时,nextMethod() 也会被调用。在这种情况下更新您的 UI 是您的用户一旦注意到就会欣赏的特殊效果之一。

有关更多信息,请阅读以下内容:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多