提问者:小点点

我希望只有在接收到实时数据之后才调用函数


我用的是Android中的实时数据。 但是我的问题是,在每个函数被调用之后,数据最后都被接收到了。 在我的例子中,我的一个函数依赖于实时数据,但它在接收到实时数据之前被调用。我添加了注释以使大家更好地理解。 请帮帮我。

// polist is a MutableList
 transactionDao.selectAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                }
            })
 vregularDao.getAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                }
            })
// but this is called first then above codes.I want this to be called only after live data is received
 alllist.forEach{
         //perform some action   
        }       

 

共1个答案

匿名用户

您可能需要研究线程。 下面的代码在一个线程中运行,一旦有一个返回值,它就被添加到polist

transactionDao.selectAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                }
            })

相同的

 vregularDao.getAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                }
            })

因此,最后一段代码是直接调用的。 因为其他两个线程目前还没有返回任何数据。

您需要创建某种阻止程序。

所以它会在列表枚举之后调用另一个函数,这是不优雅的(PSUDEOCODE)。。。

    bool selectAllDone;
    bool getAllDone;
    // polist is a MutableList
 transactionDao.selectAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                   performSomeAction();
                   selectAllDone = true;
                }
            })
 vregularDao.getAll().observe(this, Observer {
                if (it != null && it.isNotEmpty()) {
                   polist.addAll(it)
                   performSomeAction();
                   getAllDone = true;
                }
            })
    // but this is called first then above codes.I want this to be called only after live data is received
     public fun performSomeAction(){
if(getAllDone & selectAllDone){
     alllist.forEach{
             //perform some action   
            }  
}
}