Я создаю приложение для Android, которое следует шаблону MVVM, используя Room и LiveData, но мне нужно вернуть идентификатор последней вставки в одну таблицу, потому что она используется для добавления значений в другую таблицу, где идентификатор является внешним ключом Я знаю, что могу добиться этого, вернув его из DAO:
@Dao
interface TratamientoDao {
@Insert
fun insert(tratamiento : Tratamiento): Long
}
Но проблема в том, что мне нужно вернуть значение из AsyncTask, который вставляет новую запись, я попробовал подход, объясненный в этом вопросе: Как получить результат OnPostExecute () для основной деятельности, потому что AsyncTask отдельный класс?
Но в моем случае метод processFinish никогда не вызывается.
Это мой код:
interface AsyncValue{
fun processFinish(lastID: Long?) : Long?
}
class TratamientoRepository (application: Application): AsyncValue {
val tratamientoDao : TratamientoDao
init{
val database = MMRDataBase.getInstance(application)
tratamientoDao = database.tratamientoDao()
}
fun insert(tratamiento: Tratamiento) : Long? {
InsertTratamientoAsyncTask(tratamientoDao).execute(tratamiento)
return 45
}
override fun processFinish(lastID: Long?): Long? {
Log.d("ValorIngresado:", lastID.toString())
return lastID
}
private class InsertTratamientoAsyncTask constructor(private val tratamientoDao: TratamientoDao) : AsyncTask<Tratamiento, Void, Long>(){
var completionCode : AsyncValue? = null
override fun doInBackground(vararg params: Tratamiento): Long?{
return tratamientoDao.insert(params[0])
}
override fun onPostExecute(result: Long?) {
completionCode?.processFinish(result)
//Log.i("TAMANO", result.toString())
}
}
}
Итак, как я могу вернуть значение из AsyncTask в Kotlin?