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