Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何在MVVM中更新实时数据_Kotlin_Android Livedata_Android Mvvm - Fatal编程技术网

Kotlin 如何在MVVM中更新实时数据

Kotlin 如何在MVVM中更新实时数据,kotlin,android-livedata,android-mvvm,Kotlin,Android Livedata,Android Mvvm,我希望使用EditText从用户处获取输入,并将其传递给服务器,并向用户显示响应。我只是在没有任何架构的情况下完成这项工作,但我想在MVVM中实现它。 这是我的存储库代码: class Repository { fun getData(context: Context, word: String): LiveData<String> { val result = MutableLiveData<String>() val re

我希望使用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
    }
}

我的版面有一个EditText,我想获取用户输入并将其传递给服务器,我应该如何做?

这里是我在projet中如何做的

您可能可以使用android注释。 这将要求您放置一些依赖项,可能会稍微更改类,但是您需要将Viewmodel与存储库链接,然后必须对变量的setter进行编程,通过使类从BaseObservable继承来执行notifyChange()。然后,在xml中,如果您正确地执行了以下操作,您应该能够执行类似文本的操作:“@={model.variable}”,并且它应该同时进行更新

有点难解释或者向我表示抱歉,但我会研究带有@DataBinding、@DataBound:BaseObservable的Android注释

希望能对你有所帮助

class ViewModel(application: Application) : AndroidViewModel(application) {
    fun getData(word: String): LiveData<String> {
        val repository = Repository()
        return repository.getData(getApplication(), word)
    }
}
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")
        })
    }
}