我用的是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
}
您可能需要研究线程。 下面的代码在一个线程中运行,一旦有一个返回值,它就被添加到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
}
}
}