Подход 1: Вы можете использовать поле автоинкремента или PrimaryKey
, например id
, для функциональности book_order
.Вы даже можете назвать это book_order
, если хотите.Сделайте свой класс Model или Entity похожим на:
public class Book{
@PrimaryKey(autoGenerate = true)
private int book_order;
//other data members, constructors and methods
}
. Таким образом, значение book_order
увеличивается с каждым добавленным в базу данных Book
.
Далее вы можете получить ViewModel
classs like:
public class MyViewModel extends AndroidViewModel {
private BookRepository bookRepository;
LiveData<List<Book>> books;
public MyViewModel(@NonNull Application application) {
super(application);
bookRepository = AppRepository.getInstance(application.getApplicationContext());
books = bookRepository.getBooks();
}
}
Теперь вы можете подписать свой список Activity на эту ViewModel (т. е. заставить вашу активность наблюдать ViewModel), поместив вызов следующего метода в onCreate()
:
вашего действия.
private void initViewModel() {
final Observer<List<Book>> bookObserver= new Observer<List<Book>>() {
@Override
public void onChanged(@Nullable List<Book> books) {
bookList.clear();
bookList.addAll(books);
if (mAdapter == null) {
mAdapter = new BooksAdapter(bookList, YourActivity.this);
mRecyclerView.setAdapter(mAdapter);
} else {
mAdapter.notifyDataSetChanged();
}
}
};
mViewModel = ViewModelProviders.of(this)
.get(MyViewModel.class);
mViewModel.mBooks.observe(this, notesObserver); //mBooks is member variable in ViewModel class
}
Делая эти вещи, вы сможете получать обновления, т.е.всякий раз, когда пользователь добавляет в вашу базу данных Book
, представление Список / Переработчик должно автоматически отображать добавленные Book
.
Подход 2: Если это не то, что выЕсли вы хотите, и вам нужно только найти заказ последней добавленной книги, вы можете полностью пропустить третий кодовый блок и использовать следующее в Dao
:
@Query("SELECT COUNT(*) FROM books")
int getCount();
, что дает общее количество книг.то есть.строки в таблице книг, которые вы можете затем вызывать из своего репозитория, которые, в свою очередь, могут вызываться из вашей ViewModel, которые, в свою очередь, могут вызываться из Activity.
подход 3: Есливы хотите book_order
, которое, я думаю, является последним числом книг в базе данных после добавления новой книги, вы можете использовать подход 1, который дает вам список книг в ViewModel.Затем вы можете получить количество книг из списка книг.
Важно! В любом случае вы захотите отредактировать свой метод insertBook()
в своем редакторе или в новой модели ViewBook ViewBook и сделать его примерно таким:
public void insertBook(Book book) {
Book book= mLiveBook.getValue(); //declare mLiveBook as MutableLiveData<Book> in this ViewModel
//maybe put some validation here or some other logic
mRepository.insertBook(book);
}
и в своемХранилище соответствующей вставки будет выглядеть так:
public void insertBook(final Book book) {
executor.execute(new Runnable() {
@Override
public void run() {
mDb.bookDao().insertBook(book);
}
});
}
и соответствующий метод Дао:
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertBook(Book book);