Запрос SELECT возвращает ноль, хотя объект существует Kotlin \ Room - PullRequest
1 голос
/ 27 марта 2019

Я пытаюсь создать приложение будильника, используя Rooms.Мой метод repository.getAlarmById(1) возвращает ноль .Но repository.getAlarms() выходы

Тревога (id = 1, мин = 12, час = 12, разрешено = true, isRepeating = true)

Тревога (id = 2, min =13, час = 13, включено = истина, isRepeating = истина)

Здесь AlarmDao

@Dao
interface AlarmDao {

    @Query("SELECT * FROM alarm_table")
    fun getAll(): LiveData<List<Alarm>>

    @Query("SELECT * FROM alarm_table WHERE id = :id")
    fun getById(id: Int): LiveData<Alarm>

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun insert(alarm: Alarm)

    @Delete
    fun delete(alarm: Alarm)
}

AlarmRepository

class AlarmRepository (private val alarmDao: AlarmDao): AlarmDataSource {

    override fun getAlarms(): LiveData<List<Alarm>> {
        return alarmDao.getAll()
    }

    override fun getAlarm(id: Int): LiveData<Alarm> {
        return alarmDao.getById(id)
    }

    override fun saveAlarm(alarm: Alarm) {
        doAsync { alarmDao.insert(alarm) }
    }

    override fun deleteAlarm(alarm: Alarm) {
        doAsync { alarmDao.delete(alarm) }
    }
}

И Тревога Класс

@Entity(tableName = "alarm_table")
data class Alarm(
        @PrimaryKey
        var id: Int = 0,

        @ColumnInfo(name = "min")
        var min: Int = -1,

        @ColumnInfo(name = "hour")
        var hour: Int = -1,

        @ColumnInfo(name = "enabled")
        var enabled: Boolean = true,

        @ColumnInfo(name = "isRepeating")
        var isRepeating: Boolean = false )

Почему я всегда получаю ноль?

1 Ответ

2 голосов
/ 28 марта 2019

Ваш код выглядит нормально. Мое предложение 2 вещи, чтобы проверить.

Во-первых. Добавьте LIMITED 1 к вашему запросу и отметьте его

Во-вторых. Если все еще не работает, убедитесь, что ваш LiveData работает хорошо. Помните, что живые данные просто работают, когда объект изменяется! Возможно, есть проблема с этой проблемой, и вы можете добавить наблюдателя к своему viewmodel вручную. Чтобы проверить эту проблему, просто удалите LiveData из вашего возвращаемого типа и проверьте его снова.

...