Репозиторий комнат: выбор одной строки по идентификатору - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь найти лучший способ получить одну строку с помощью Room по идентификатору.Я скопировал код из руководства о том, как извлечь все мои строки в сущности (Workout плюс все соединенные сущности), и это прекрасно подходит для заполнения представления переработчика.

Но когда мне нужно перейти ктолько один, в настоящее время мой код предположения в хранилище:

@WorkerThread
suspend fun getWorkoutById(id: Long): LiveData<WorkoutTree> {
    return workoutDao.getWorkoutById(id)
}

и в DAO

@Transaction
@Query("SELECT * FROM WORKOUTS WHERE id=:id")
fun getWorkoutById(id: Long): LiveData<WorkoutTree>

Естественно, я вызываю repository.getWorkoutById(myId) из моей модели представления, чтобы я мог заполнить данные исослаться на это из моей Деятельности / Фрагмента.

Но я пытаюсь выяснить, нахожусь ли я на правильном пути и лучший способ получить это.Честно говоря, это локальная БД для телефона, поэтому не нужно беспокоиться о необходимости оперативных обновлений.

Было бы лучше просто сериализовать объект, указанный в Recyclerview, перечисляющий все строки, и передать его в мою деятельность ине хотите извлекать по идентификатору?

Практически в каждом примере, который я нахожу в Интернете о разработке Room и Android, приводятся примеры извлечения всех строк и использования LiveData, а хранилище имеет открытое свойство LiveData>, заполненное исходным DAO.извлечение всех строк из сущности.

Мне трудно мысленно перевести этот пример в тот, в котором я бы просто выбрал одну строку.

У меня нет ни одного действующего кода, которым можно поделиться, так как я не могу понять, как его спроектировать в Kotlin, Room и тому подобном.Я никогда раньше не писал приложений для Android и пришел из опыта функционального программирования через Python, JS, Scala и поэтому борюсь с тем, как руководства Kotlin и руководства Android рекомендуют вам делать это со всеми дополнительными классами и интерфейсами, используемыми для отделения всего дляприложение для телефона.

1 Ответ

0 голосов
/ 01 мая 2019

Вы никогда не должны, как показывает практика, загружать все данные, когда вам нужна только их часть. Будь то настольное или мобильное приложение, вы всегда должны загружать именно то, что вам нужно. Тем не менее, вы на правильном пути. Поскольку вы загружаете только одну строку, аннотация @Transaction не требуется. Кроме этого, если id объявлено с аннотацией @PrimaryKey(autoGenerate = true), то getWorkoutById должно работать просто отлично.

Если вы ищете хороший учебник о Room, вы можете сделать этот короткий бесплатный урок Компоненты архитектуры Android . Перейдите прямо к уроку 8 , так как он не полагается на предыдущие уроки.

Если, с другой стороны, вам нужен только пример, взгляните на это приложение из учебника . Чтобы быть более конкретным, посмотрите на объект DAO здесь . Вы увидите, что именно это вы и сделали, за исключением того, что написано на Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...