【发布时间】:2021-09-25 20:18:39
【问题描述】:
大家好,我面临以下问题。我有一个数据库 Room,我有 2 个表 POST_TABLE 和 SELL_TABLE。
现在我需要从两个表中获取数据并添加到数组列表中。 我使用观察者来跟踪 sell items 何时加载,然后将其添加到数组列表中,我对 post items
执行相同操作我这样做是为了在回收站视图中显示两种不同的视图类型对象。
在 ViewModel 中一切都很简单,我可以访问数据库、接收销售并发布 DAO 并初始化存储库。
在我看来,我做错了在主片段中的观察者中制作观察者。
在最佳实践中,我没有找到合适的答案。也许有人知道如何正确地从房间获取数据?
From HomeFragment
private fun initObserver() {
viewModel.sellList.observe(viewLifecycleOwner, {
viewModel.addSellItemsToArray()
viewModel.postList.observe(viewLifecycleOwner, {
viewModel.addPostItemToArray()
initRecyclerView(viewModel.homeArrayList)
})
})
}
From ViewModel
private val sellRepository: SellRepository
private val postRepository: PostRepository
var sellList: LiveData<List<Sell>>
var postList: LiveData<List<Post>>
private var _homeItem = MutableLiveData<ArrayList<HomeItem>>().apply {
value = arrayListOf()
}
val homeItem get() = _homeItem
val homeArrayList = arrayListOf<HomeItem>()
init {
val sellDao = MainDatabase.getDatabase(application).sellDao()
val postDao = MainDatabase.getDatabase(application).postDao()
sellRepository = SellRepository(sellDao)
postRepository = PostRepository(postDao)
sellList = sellRepository.getAllSellList()
postList = postRepository.getPostList()
}
fun addSellItemsToArray() {
for (sell in sellList.value!!) {
val homeItem = HomeItem()
homeItem.userName = sell.userName
homeItem.userImage = sell.userImage
homeItem.imagesArray = sell.imagesArray
homeItem.desc = sell.desc
homeItem.itemForSell = sell.itemForSell
homeItem.price = sell.price
homeItem.country = sell.country
homeItem.city = sell.city
homeItem.address = sell.address
homeArrayList.add(homeItem)
}
}
fun addPostItemToArray() {
for (post in postList.value!!) {
val homeItem = HomeItem()
homeItem.userName = post.postedUserName
homeItem.userImage = post.userUrl
homeItem.imagesArray = arrayListOf(post.postUrl)
homeItem.desc = post.commit
homeItem.likesCount = post.likesCount
homeArrayList.add(homeItem)
}
}
【问题讨论】:
标签: android android-room viewmodel observers