Я хочу, чтобы идентификатор автоматически генерировался при выполнении операции вставки в базу данных Room. Я реализую архитектуру MVVM (Model-View-ViewModel), которая использует DAO для запуска запросов к базе данных Room. Я добавил слой репозитория между viewmodel и DAO, чтобы создать AsyncTask для выполнения операций с базой данных. Как получить выходные данные операции вставки (которая является автоматически сгенерированным идентификатором вставленной строки) для фрагмента, который использует модель представления. Слои следующие: Фрагмент -> ViewModel -> Хранилище -> DAO
ListFragment.java
public class ListFragment extends Fragment {
private ReminderViewModel viewModel;
private int id;
...
viewModel = ViewModelProviders.of(this).get(ReminderViewModel.class);
...
id = viewModel.insert(new TodoReminder(0, description, date, time));
...
}
ReminderViewModel.java
public class ReminderViewModel extends AndroidViewModel {
private ReminderRepository repository;
public ReminderViewModel(@NonNull Application application) {
super(application);
repository = new ReminderRepository(application);
}
public int insert(TodoReminder reminder) {
repository.insert(reminder);
}
}
ReminderRepository.java
public class ReminderRepository {
private ReminderDAO reminderDAO;
public ReminderRepository(Application application) {
AppDatabase db = AppDatabase.getDatabase(application);
reminderDAO = db.getReminderDAO();
}
public int insert(TodoReminder reminder) {
new insertAsyncTask(reminderDAO).execute(reminder);
}
private static class InsertAsyncTask extends AsyncTask<TodoReminder, Void, Integer> {
private ReminderDAO asyncTaskDAO;
insertAsyncTask(ReminderDAO dao) {
asyncTaskDAO = dao;
}
@Override
protected Integer doInBackground(final TodoReminder... reminders) {
return asyncTaskDAO.insert(reminders[0]);
}
}
}
ReminderDAO.java
@Dao
public interface ReminderDAO {
@Insert
public int insert(TodoReminder... reminders);
}
ToDoReminder.java
public class TodoReminder implements Serializable {
@PrimaryKey(autoGenerate = true)
@NonNull
private int id;
...
}
Как получить int, возвращенный из метода вставки ReminderDAO, и вернуть его из метода вставки в ReminderRepository?