как будут обновляться живые данные в MVVM - PullRequest
0 голосов
/ 09 февраля 2020

Я хочу получить ввод от пользователя с помощью 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)
    }
}

, и моя основная активность будет выглядеть так:

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")
        })
    }
}

My макет имеет EditText, который я хочу получить пользовательский ввод и передать его на сервер, как мне это сделать?

1 Ответ

0 голосов
/ 11 февраля 2020

Вот как я это сделал в моем проекте.

Вы, вероятно, можете использовать android аннотации. Вам потребуется поместить некоторые зависимости и, возможно, немного изменить класс, но затем вы свяжете вашу Viewmodel с вашим репозиторием, а затем вам придется запрограммировать установщик переменной для выполнения notifyChange (), сделав класс наследуемым от BaseObservable. Затем в xml, если вы все сделали правильно, вы сможете сделать что-то вроде текста: «@ = {model.variable}», и он должен обновляться одновременно.

A немного сложно и объяснить или показать мне извините, но я бы посмотрел на Android аннотации с @DataBinding, @DataBound: BaseObservable https://github.com/androidannotations/androidannotations/wiki/Data-binding-support

Надеюсь, что это может помочь немного!

...