如何在 MVVM 中更新实时数据
Posted
技术标签:
【中文标题】如何在 MVVM 中更新实时数据【英文标题】:how Live data will be update in MVVM 【发布时间】:2020-05-25 04:54:33 【问题描述】:我想使用 EditText 从用户那里获取输入并将其传递给服务器并向用户显示响应。我只是在没有任何架构的情况下这样做,但我想在 MVVM 中实现它。 这是我的存储库代码:
class Repository
fun getData(context: Context, word: String): LiveData<String>
val result = MutableLiveData<String>()
val request = object : StringRequest(
Method.POST,
"https://jsonplaceholder.typicode.com/posts",
Response.Listener
result.value = it.toString()
,
Response.ErrorListener
result.value = it.toString()
)
@Throws(AuthFailureError::class)
override fun getParams(): MutableMap<String, String>
val params = HashMap<String, String>()
params["word"] = word
return params
val queue = Volley.newRequestQueue(context)
queue.add(request)
return result
这些是我的视图模型代码:
class ViewModel(application: Application) : androidViewModel(application)
fun getData(word: String): LiveData<String>
val repository = Repository()
return repository.getData(getApplication(), word)
而我的 mainActivity 会是这样的:
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val model = ViewModelProviders.of(this).get(ViewModel::class.java)
model.getData("test").observe(this, Observer
Log.i("Log", "activity $it")
)
我的布局有一个 EditText,我想获取用户输入并将其传递给服务器,我应该怎么做?
【问题讨论】:
【参考方案1】:这是我在项目中的做法。
您可能可以使用 android 注释。 它会要求您放置一些依赖项,并且可能会稍微更改类,但随后您要将 Viewmodel 与存储库链接,然后您必须对变量的设置器进行编程,以通过使类继承来执行 notifyChange() BaseObservable。然后在 xml 中,如果你做对了,你应该能够做类似 text:"@=model.variable" 的事情,并且它应该同时更新。
有点难解释或向我道歉,但我会用@DataBinding、@DataBound :BaseObservable 来研究 Android 注释 https://github.com/androidannotations/androidannotations/wiki/Data-binding-support
希望能有所帮助!
【讨论】:
以上是关于如何在 MVVM 中更新实时数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mysql 数据库中的 nodejs 和 socket.io 在网页上获得实时更新?