【发布时间】:2018-03-20 14:29:14
【问题描述】:
喂!
我想知道在 Volley 请求完成并调用 onResponse 处理程序后,使用 Kotlin 更新 Android 应用程序的 UI 的最佳做法是什么。我想解决问题的方式给了我一些困难,所以也许我有错误的方法......
我来自同步世界,因此我的方法是这样的:创建一个获取数据并返回获取数据的类。函数返回数据后,更新 UI。
然而,我们生活在一个异步的世界中,因此方法必须不同。
我仍然希望在额外的类中获取数据。如this tutorial 所示,在主类中获取数据并从 onResponse 事件监听器中更新 UI 很简单,但不是最佳实践,对吧?数据获取类不应包含对 UI 的任何引用,因为它应该是可重用的。
如何以简单但有效且可重复使用的方式完成?请举例说明。可以用 async/await 之类的东西来完成吗?可以用钩子或事件侦听器之类的东西来完成吗(我在想socket.io)。 Adapter.notifyDataSetChanged() 可以帮忙吗?
我一直在寻找这个主题几个小时,但我找不到任何有用的东西。所以要么我找错了地方,要么答案很明显,以前没有人问过。到目前为止,我找到的一些答案非常具体,或者包含太多额外的代码,我觉得它没有用。
由于许多应用程序都在做我想要实现的目标,这一定是一件容易的事。任何从互联网获取数据的应用程序都需要我所要求的。所以我一定是错过了什么。
谢谢!
【问题讨论】:
-
使用
onResponse是简单更新的最佳实践。如果您不想直接更新 UI,请使用 MVP 或 MVVM 并在 onRespone 回调中更新您的模型。回调在 UI 线程上执行。如果您想要更“详细”的方式,请查看LiveData -
但是使用
onResponse进行 UI 更新会迫使我在主类中包含数据获取功能,这会带走很多可重用性。 -
如果你想要简单,就这样做吧。如果你想要它nice,你必须学习如何正确使用像 MVVM 这样的模式。已经有很多资源(包括 SO)解释了这些模式。如果您有更多问题,您应该提出一个新的(特定)问题,而不是编辑这个问题。
标签: android kotlin android-volley