【发布时间】:2018-01-17 08:33:08
【问题描述】:
我正在创建我的 MVVM 模板项目。 MVVM 的工作方式是 View 观察 VM 的变化并对它们做出反应。我将如何在以下示例中实现该逻辑。
查看代码:
fun addPost(): Unit {
viewModel.addPost(dataSource.text.get(), dataSource.title.get(), { postID: Long ->
if (postID.equals(0)) {
Toast.makeText(MyApp.instance.getContext(), "Error", Toast.LENGTH_LONG).show()
} else {
(arguments.get(ARG_RunOnPositiveDismiss) as (DMPost) -> Unit)(DMPost(postID, MyOptions.User.GET()!!.UserID, dataSource.title.get(), dataSource.text.get()))
dismiss()
}
})
}
ViewModel 代码:
fun addPost(title:String,text:String,onSuccess: (Long) -> Unit): Unit {
rep.insertPost(DMPost(0, MyOptions.User.GET()!!.UserID, title, text),onSuccess)
}
存储库代码:
fun insertPost(post: DMPost, onSuccess: (Long) -> Unit) {
if (MyOptions.Online.GET()!!) {
val client = retrofit.create(APIPost::class.java)
val insertPost: Call<Long> = client.insertPost(post)
insertPost.enqueue(object : Callback<Long> {
override fun onResponse(call: Call<Long>, response: Response<Long>) {
if (response.isSuccessful) {
onSuccess(response.body()!!)
} else {
onSuccess(0)
}
}
override fun onFailure(call: Call<Long>, t: Throwable) {
onSuccess(0)
}
})
} else {
AsyncTask.execute {
try {
onSuccess(daoPost.insertPost(EntityPost(post)))
} catch (e: Exception) {
onSuccess(0)
}
}
}
}
我假设我需要在我的视图中有 2 种方法,一种用于显示错误 toast,另一种用于成功。视图应观察 VM 上的值以及该值的更改,应调用其中之一这两种方法。
我的假设对吗? 如果是,有人可以为该逻辑编写代码吗?
【问题讨论】:
标签: android mvvm architecture kotlin