Наблюдение LiveData не будет обновляться - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу отправить некоторые данные на сервер и показать их ответ пользователю. Я использую MVVM, поэтому я создал репозиторий, подобный этому:

class Repository {


    fun getData(context: Context, word: String): LiveData<String> {

        val result = MutableLiveData<String>()

        val request = object : StringRequest(
            Method.POST,
            "https://.......",
            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


    }


}

, который просто отправляет «слово» на сервер и получает ответ. Мой класс модели представления содержит только mutableLiveData и функцию. это так:

class ViewModel(application: Application) : AndroidViewModel(application) {


    var result = MutableLiveData<String>()


    fun getData(word: String): LiveData<String> {
        val repository = Repository()
        result = repository.getData(getApplication(), word) as MutableLiveData<String>
        return result
    }


}

Я установил наблюдение за результатом в моей основной Деятельности, поэтому это мои коды MainActivity:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
val model = ViewModelProviders.of(this).get(ViewModel::class.java)


submit.setOnClickListener {
    model.getData(search_txt.text.toString())

}

model.result.observe(this, Observer {
    Log.i("Log", "observe is :$it")
    text.text = it
})
}

, но это не работает! Я получаю пользовательский ввод, используя текст редактирования, и после нажатия кнопки я вызываю функцию getData, которая находится в моем классе View Model. но он всегда возвращает ноль, и наблюдение не сработает.

Я пытаюсь поместить метод наблюдений в моем приемнике кнопок, таким образом я получаю результат, но кажется, что это не правильный путь, потому что после того, как я поверну свой телефон, все данные исчезли, и мне нужно снова получить данные с сервера, хотя это не должно быть.

...