让 ObjectBox 与 LiveData 和 Kotlin 一起工作

Getting ObjectBox to work with LiveData and Kotlin

我有一些使用 Room 的工作代码,我的存储库中有一个函数如下所示:

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

我的 ViewModel 看起来像这样(只是 returning 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()
}

但是查询类型不匹配 return“ObjectBoxLiveData 而不是列表...但是我正在尝试查询所有字符 objects/documents,但是我到底应该怎么做建造这个?

谢谢
索伦

无需指定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.

视图模型示例:https://github.com/objectbox/objectbox-examples/blob/780563ccb46d3198c70669f91910eaaea5ed72c7/android-app-arch/src/main/java/io/objectbox/example/NoteViewModel.java