Android Room SQLITE Обновление пользовательских запросов с MVVM - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь выполнить простой запрос на обновление, в котором будет обновлен ОДИН столбец в строке. Каждый пример, который я видел в Интернете, выполняет полное обновление, где обновляется вся строка. Я использую MVVM - Activity, Viewmodel, Repository, AsyncTask, DAO.

Все работает нормально, пока я не доберусь до задачи Asyn c. Метод doInBackground ожидает 2 параметра - первичный ключ, используемый для идентификации строки и данных, которые будут обновлены. Однако задача Asyn c принимает только объект. Поэтому я не уверен, как поступить. Пожалуйста, смотрите фрагменты ниже:

 DAO
@Query ("UPDATE CbtTable SET twistedThinkingPK = :twistedThinkingPK WHERE  cbtId = :cbtId")
void updateTwistedThinking(long cbtId, long twistedThinkingPK);

ASYNC
 @Override
protected Void doInBackground(CbtTable... cbtTables) {

    mCbtDao.updateTwistedThinking(cbtTables[0]); // THIS THROWS THE ERROR, IT WANTS THE TWO VARIABLES FORM THE DAO UPDATE QUERY.
    return null;

 REPOSITORY
 public void updateTwistedThinking(CbtTable cbtTable){


    new UpdateTwistedThinkingAsyncTask(cbtDao).execute(cbtTable);
}

 VIEW MODEL
  public void updateTwistedThinking(CbtTable cbtTable){
    cbtRepository.updateTwistedThinking(cbtTable);
}

ACTIVITY
public void updateTwistedThinkingCbtTable(long twistedThinkingPK){

  CbtTable cbtTable = new CbtTable();
  cbtTable.setTwistedThinkingPK(twistedThinkingPK);
  cbtViewModel.updateTwistedThinking(cbtTable);
}

1 Ответ

0 голосов
/ 09 февраля 2020

Как насчет попытки следующего подхода?

@Override
protected Void doInBackground(CbtTable... cbtTables) {
    CbtTable cbtTable = cbtTables[0]
    mCbtDao.updateTwistedThinking(cdtTable.getCbtId(), cdtTable.getTwistedThinkingPK());
    return null;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...