База данных комнаты Вставьте или обновите, но сохраните поле базы данных?

Я пытаюсь выполнить следующий сценарий -> Записи извлекаются из API и сохраняются в БД. Некоторые записи могут быть выбраны как favorite и они должны оставаться такими, даже если новые данные извлекаются из API. Но я не могу найти способ, чтобы не заменить те записи, которые уже были выбраны в качестве favorite без замены всей строки. Я попытался вставить записи один за другим и как-то в этом вставке проверить, если запись уже существует, но я не могу понять, используя RxJava.

Dao

  @Dao interface KafanaDao { @Insert fun insertSingleKafana(kafana: Kafana) @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertAll(kafani: List<Kafana>) @Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME}") fun getKafani(): Single<List<Kafana>> @Query("SELECT * FROM ${Constants.KAFANI_TABLE_NAME} WHERE name = :name") fun getSingleKafana(name: String): Single<Kafana> @Query("UPDATE ${Constants.KAFANI_TABLE_NAME} SET isFavorite = :isFavorite WHERE name = :name") fun setFavourite(name: String, isFavorite: Int) } 

Затем я продолжаю вставлять записи один за другим, но как проверить, сохранены ли они в базе данных?

 fun insertSingleKafanaInDb(kafana: Kafana) { Observable.fromCallable { kafanaDao.insertSingleKafana(kafana) } .subscribeOn(Schedulers.io()) .subscribe { Timber.d("Inserted ${kafana.name} kafani from API in DB...") } } fun getKafaniFromApi(): Observable<List<Kafana>> { return apiService.getKafani().toObservable().doOnNext { for (kafana in it) { //I need to somehow do the check here insertSingleKafanaInDb(kafana) } } } 

Entity

  @Entity(tableName = Constants.KAFANI_TABLE_NAME) data class Kafana( @PrimaryKey @ColumnInfo(name = "name") @SerializedName("name") val name: String, @ColumnInfo(name = "phone") @SerializedName("phone") val phone: String, @ColumnInfo(name = "address") @SerializedName("address") val address: String, @ColumnInfo(name = "city") @SerializedName("city") val city: String, @ColumnInfo(name = "sponsored") @SerializedName("sponsored") val isSponsored: Boolean, @ColumnInfo(name = "isFavorite") var isFavorite: Boolean ) 

Может быть сделано двумя подходами

Первый: – Перед вставкой Kafane вы запрашиваете getSingleKafana (имя: String): Single и получите его из базы данных, если он доступен, и получите статус фаворита и установите это любимое поле для нового объекта KAFANA из API.

Второй: выполните запрос, в котором он будет возвращен. Список объектов KAFANA с избранным является истинным, результат будет List, прежде чем вставлять новую KAFANA из проверки API. Kafana представлен в списке.

Номер не будет поддерживать какой-либо условный запрос вставки. Он будет вставлять весь объект.

Intereting Posts
Невозможно подтвердить приостановленный блок, переданный для forEach Как я могу разделить последовательность целых чисел на диапазоны (java \ kotlin) Классы Котлина, содержащие андроид-расширения, не построенные на последовательных строках Прослушивание сообщений и написание команд по наблюдаемому потоку Одноразовые события в архитектуре MVI несоответствие типов в котлине Что случилось с моим Android-приложением калькулятора? Как отменить булевское выражение при использовании оператора elvis в котлин? Kotlin spring-boot @ConfigurationProperties AccessToken.getCurrentAccessToken () всегда возвращает null в Kotlin Android-версия 3.1 Canary 4 Genymotion Emulator Plugin Failed Общие типы подстановочных знаков не поддерживаются Пустой конструктор для объекта kotlin для использования Firebase Ошибка при создании банки проекта IntelliJ, содержащего смешанный Groovy, Kotlin Array / List iteration без дополнительных распределений объектов