Библиотека комнат для Android - SQlite: ошибка отладки - PullRequest
0 голосов
/ 12 июля 2019

Просто настроил Sqlite db, выполнил мою первую успешную вставку, пытался выполнить запрос обновления в коде, когда вдруг Android не удалось скомпилировать. Получение этой ошибки:

Gradle may disable incremental compilation as the following annotation processors are not incremental: room-compiler-2.1.0.jar (androidx.room:room-   compiler:2.1.0), lifecycle-compiler-2.0.0.jar (androidx.lifecycle:lifecycle-compiler:2.0.0).
Consider setting the experimental feature flag android.enableSeparateAnnotationProcessing=true in the gradle.properties file to run annotation processing in a separate task and make compilation incremental.
C:\app\src\main\java\com\example\persistence\repositories\NoteRepository.java:74: error: method update in interface NoteDao cannot be applied to given types;
        noteDao.update(notes[0]);
               ^
 required: int,int
 found: Note

Ошибка, связанная с этим методом в репозитории:

private static class UpdateNoteAsyncTask extends AsyncTask<Note, Void, Void>{

private NoteDao noteDao;

private UpdateNoteAsyncTask(NoteDao noteDao){
this.noteDao = noteDao;
}

@Override
   protected Void doInBackground(Note... notes) {

   noteDao.update(notes[0]);
        return null;
   }
 }

Класс доступа к данным:

@Dao
public interface NoteDao {

@Insert
void insert(Note note);

@Query("UPDATE note_table SET distortions= :distortions WHERE cbtId= :cbtId")
void update(int cbtId, int distortions);

@Delete
void delete(Note note);

1 Ответ

1 голос
/ 12 июля 2019

У вас есть update, определенное как:

@Query("UPDATE note_table SET distortions= :distortions WHERE cbtId= :cbtId")
void update(int cbtId, int distortions);

Поэтому вы должны использовать его следующим образом:

update(int cbtId, int distortions)

Когда вы используете его так:

noteDao.update(notes[0]);

Градл ожидает два аргумента.Здесь говорится, что он нашел объект Note (один из ваших аргументов).

    required: int,int
    found: Note
...