Я использую библиотеку сохраняемости помещения для обновления базы данных. Я застрял в точке, где я хочу получить идентификатор недавно вставленной записи.
Я знаю, что использование long, поскольку возвращаемый тип для метода вставки возвращает идентификатор. Но я обращаюсь к этому методу Dao через модель просмотра.
Мой метод DAO выглядит следующим образом:
//MyDao
@Insert
long insert(RecordItem record);
Доступ к этому методу осуществляется из репозитория следующим образом:
//MyRepository
public class MyRepository {
private MyDao myDao;
public MyRepository(@NonNull Application application) {
MainDatabase mainDatabase = MainDatabase.getInstance(application);
myDao = mainDatabase.myDao();
}
public void insert(RecordItem record) {
MainDatabase.dbWriteExecutor.execute(() -> {
myDao.insert(record);
});
}
}
И метод репозитория вызывается из viewmodel следующим образом:
//MyViewModel
public void insert(RecordItem record) {
repository.insert(record);
}
И, наконец, метод viewmodel как:
//MyActivity
myViewModel.insert(record);
Моя проблема в том, что я не знаю, как я могу получить длинный возврат через метод viewmodel. Я пробовал сделать это в репозитории
//MyRepository
public class MyRepository {
private MyDao myDao;
private long id;
public MyRepository(@NonNull Application application) {
MainDatabase mainDatabase = MainDatabase.getInstance(application);
myDao = mainDatabase.myDao();
}
public long insert(RecordItem record) {
MainDatabase.dbWriteExecutor.execute(() -> {
id = myDao.insert(record);
});
return id;
}
}
и последующие изменения в методе модели просмотра.
Однако он возвращает 0, что, как я полагаю, происходит, поскольку метод вставки выполняется в другом потоке и id возвращается, как только достигается инструкция (поправьте меня, если я ошибаюсь).
Заранее спасибо.