Как получить возвращаемое значение OnConflictStrategy из DAO - PullRequest
0 голосов
/ 04 июня 2019

Я пользуюсь Room Persistence Library.Операция работает как положено.Но как мне получить значение onConflict из DAO обратно из вызывающего метода.Я получаю следующую ошибку

error: Not sure how to handle insert method's return type.

Обновление После изменения типа возвращаемого значения с Integer на long я получаю эту ошибку

Not sure how to handle update method's return type. Currently the supported return types are void, int or Int.

In DAO.java

@Dao
public interface UserDao {

    @Insert(onConflict = OnConflictStrategy.ABORT)
    long insert(UserEntity userEntity);

    @Update(onConflict = OnConflictStrategy.IGNORE)
    long update(UserEntity userEntity);
}

In MainActivity.java

@Override
    protected Void doInBackground(UserEntity... userEntities) {
        long result = userDao.insert(userEntities[0]);
        if(result == OnConflictStrategy.ABORT){
            result = userDao.update(userEntities[0]);

        }
        return null;
    }

Ответы [ 2 ]

1 голос
/ 04 июня 2019

В случае ConflictStrategy.ABORT Комната выдаст SQLiteConstraintException. Вы можете поймать это, чтобы соответствовать вашему случаю использования.

Полученная вами ошибка компиляции связана с тем, что @Insert операции могут возвращать только long, long[] или void. Integer не подойдет.

@Update вернет количество строк, обновленных запросом. Этот метод вернет int или void. Документ: https://www.sqlite.org/lang_update.html

0 голосов
/ 04 июня 2019

Вставить Если метод @Insert получает только 1 параметр, он может вернуть long, который является новым rowId для вставленного элемента.Если параметр является массивом или коллекцией, он должен вместо этого возвращать long [] или List.

Update Хотя обычно в этом нет необходимости, этот метод может вместо этого возвращать значение типа int, указываяколичество строк, обновленных в базе данных.

Прочитав несколько раз, я понял, что методы возвращают количество записей вместо кода ошибки.В любом случае, мой вопрос относительно того, как значения OnConflictStrategy читаются или используются, до сих пор остается без ответа

...