Я хочу, чтобы функция вызывалась только после получения данных в реальном времени - PullRequest
0 голосов
/ 14 июля 2020

Я использую живые данные в 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 Ответ

1 голос
/ 14 июля 2020

Возможно, вы захотите изучить темы. Приведенный ниже код выполняется в потоке, и как только возвращается значение, оно добавляется к 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   
            }  
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...