kotlin - 使ObjectBox与LiveData和Kotlin一起使用

标签 kotlin objectbox

我有一些使用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对象/文档,但是我到底应该如何构建呢?

谢谢
索伦

最佳答案

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

关于kotlin - 使ObjectBox与LiveData和Kotlin一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58031649/

相关文章:

java - Android:找不到 setTextTypeFace 字体资源

android - 如何使用 Retrofit 2.0 (Kotlin) 正确解析嵌套的 JSON 对象?

android - Kotlin POST 请求

android - 仅在 Android 本地单元测试中,ObjectBox ToOne 对象在实体内部为空

android - 应用程序启动时出现对象框错误 - 未找到 void io.objectbox.BoxStore.nativeDelete(long) 的实现

java - 仅访问对象框 ToMany 关系的 id

java - 运行 ObjectBox 查询时获得随机字符串作为结果而不是值

gradle - 如何将 Gradle 项目中 Kotlin 的字节码版本设置为 Java 8?

java - 为什么 Kotlin sortBy() 似乎以相反的顺序运行?

android - 将ObjectBox的@Entity类与kotlinx.serialization组合会导致冲突