Получение ObjectBox для работы с LiveData и Kotlin - PullRequest
1 голос
/ 20 сентября 2019

У меня есть некоторый рабочий код, который использует Room, где у меня есть функция в моем хранилище, которая выглядит следующим образом:

fun getCharacters(context: Context): LiveData<List<CharacterEntity>> {
    return db.characterDAO().getAll()
}

И моя ViewModel просто выглядит так (просто возвращает LiveData):

class CharactersViewModel(application: Application) : AndroidViewModel(application) {

val characters = RickAndMortyRepository.getInstance(application).getCharacters(application)

}

Теперь я хотел бы преобразовать это, чтобы использовать ObjectBox вместо этого, чтобы проверить его, но я не могу обернуть его вокруг ... Я попытался изменить методы своего репозитория следующим образом:

fun getCharacters(context: Context): ObjectBoxLiveData<List<Character>> {
    val characters = ObjectBox.boxStore.boxFor(Character::class.java)
    return ObjectBoxLiveData<List<Character>>(characters.query().build())
    //return db.characterDAO().getAll()
}

Но существует несоответствие типов, так как запрос возвращает "ObjectBoxLiveData, а не список ... Но я пытаюсь выполнить запрос для всех объектов / документов Character, но как мне это сделать?

Спасибо
Сёрен

1 Ответ

1 голос
/ 23 сентября 2019

Нет необходимости указывать ObjectBoxLiveData<List<Character>>.Посмотрев на исходный код, вы увидите, что ObjectBoxLiveData определяется как ObjectBoxLiveData<T> extends LiveData<List<T>>.Так что просто сделайте:

fun getCharacters(context: Context): ObjectBoxLiveData<Character> {
    val characters = ObjectBox.boxStore.boxFor(Character::class.java)
    return ObjectBoxLiveData<Character>(characters.query().build())
}

Полная документация: https://docs.objectbox.io/android/livedata-arch.-comp.

Пример ViewModel: https://github.com/objectbox/objectbox-examples/blob/780563ccb46d3198c70669f91910eaaea5ed72c7/android-app-arch/src/main/java/io/objectbox/example/NoteViewModel.java

...