如何在 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如何实时更新数据库的字段

百度地图API怎样实现拖动标注实时更新位置数据

如何使用 mysql 数据库中的 nodejs 和 socket.io 在网页上获得实时更新?

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值

如何在 Android 上接收实时 API 数据更新?

如何从 MySQL 数据库实时更新 LibreOffice Calc 单元格?