2016-11-20 28 views
0

我正在使用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(); 
     } 
+0

你为什么不使用'nextMethod()''中'onDataChange编辑东西后'Otto'是什么? pub-sub进行操作。 – adnbsr

回答

0

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()现在也被称为每当引用数据的变化。在这种情况下更新您的用户界面是您的用户一旦注意到就会欣赏的特殊效果之一。

对于一些详细信息,也阅读这些:

相关问题