我有一些使用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

08-26 07:55