Получить данные из DAO один раз с помощью шаблона ViewModel RoomDatabase - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть приложение, в котором я использую библиотеку Room Persistence Library .

Теперь у меня есть эта проблема:

У меня в ViewModel :

public LiveData<List<Code>> getAllCodes() {
   return codeRepository.getAllCodes();
}

В моем codeRepository :

public LiveData<List<Code>> getAllCodes() {
   return appDatabase.codeDao().getAll();
}

По моему ДАО

@Query("SELECT * FROM codes ORDER BY id DESC")
LiveData<List<Code>> getAll();

Итак, в своей деятельности я могу сделать это:

codeViewModel.getAllCodes().observe(this, new Observer<List<Code>>() {
   @Override
   public void onChanged(@Nullable final List<Code> codes) {
      adapter.addItems(codes);
   }
});

И это работает, но теперь, в другом упражнении, я вызываю функцию, где мне нужно вызвать RoomDatabase, получить все коды и создать CSV. Моя проблема в том, что я делаю это:

 download_csv.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
       codeViewModel.getAllCodes().observe(this, new Observer<List<Code>>() {
          @Override
          public void onChanged(@Nullable final List<Code> codes) {
             download(codes);
          }
       });
     }
 });

Но каждый раз, когда модель кода добавляется в мою базу данных. Это называется загрузкой . Итак, как я могу получить данные за один раз из моей базы данных? Должен ли я создать вторую функцию, которая просто возвращает List или есть более чистый способ?

1 Ответ

2 голосов
/ 09 апреля 2019

Вам не нужно соблюдать LiveData во втором случае, потому что это приведет к тому, что метод download() будет вызываться при каждом обновлении кодов.

Если все, что вы хотите сделатьэто вызвать download(), когда пользователь нажимает на кнопку, а затем сделать это:

download_csv.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        List<Code> codes = codeViewModel.getAllCodes().getValue();
        if (codes != null) {
            download(codes);
        }
    }
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...