Я создаю приложение, которое взаимодействует с sqlite Via Room.Поскольку операция с базой данных не может выполняться в основном потоке, я делаю это внутри doAsync
.Вот мой код
private fun onItemClick(item:ProductModel){
//check chart, if not empty add to current chart
val transaction = Transaction(context!!)
var transactionModel:TransactionTempModel?
doAsync {
var isChartEmpty = transaction.isChartEmpty()
activity?.runOnUiThread {
if(isChartEmpty){
doAsync {
transactionModel=transaction.newTransaction()
activity?.runOnUiThread {
doAsync {
val result = transaction.addToChart(transactionModel!!,item)
activity?.runOnUiThread { dialogChartAddition(result) }
}
}
}
}
else{
doAsync {
transactionModel = transaction.getCurrenTransaction()
activity?.runOnUiThread {
doAsync {
val result=transaction.addToChart(transactionModel!!,item)
activity?.runOnUiThread { dialogChartAddition(result) }
}
}
}
}
}
}
}
все в порядке, но, как вы видите, я делаю много вложенных doAsync
и runOnUiThread
.Есть ли лучшее решение?Я пробовал по-другому, только так мое приложение работает хорошо.