如何解决使用MVVM在后台调用IO任务
有人熟练使用协程,而MVVM则具有香草Sqlite?
我发现从sqlite进行数据获取时,我发现了许多示例,这些示例并不实用,即数据不是从后台提取而是在主线程上提取。
有人可以帮忙提供一个简单的示例,说明将后台获取代码放置在何处。
我的方法可能一起出错,请寻找正确的方向
模型
class UserModel(private val connection: SQLiteOpenHelper) {
fun findAll(): ArrayList<UserVO>? {
var users: ArrayList<UserVO>? = null
connection.readableDatabase.query("users",arrayOf("id","first","last"),null,null).use { cursor ->
if (cursor.count > 0) users = ArrayList()
while (cursor.moveToNext()) {
val user = UserVO(cursor.getLong(cursor.getColumnIndex("id")),cursor.getString(cursor.getColumnIndex("first")),cursor.getString(cursor.getColumnIndex("last")),null)
users?.add(user)
}
}
return users
}
}
ViewModel
class UserViewModel: ViewModel() {
override fun findAll(result: ((ArrayList<User>?) -> Unit)?,fault: ((Exception) -> Unit)?): Job {
return GlobalScope.launch(Dispatchers.IO) {
try {
val users = userModel?.findAll()
withContext(Dispatchers.Main) { result?.let { it(users) } }
} catch (exception: Exception) {
withContext(Dispatchers.Main) { fault?.let { it(exception) } }
}
}
}
}
片段
override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {
viewModel.findAll( {
users = it ?: arrayListOf()
recyclerView.swapAdapter(UserAdapter(it!!),false)
},{ exception ->
// failure handler
})
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。