Как вызвать динамический URL в viewmodel (MVVM)? - PullRequest
0 голосов
/ 20 сентября 2019

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

Ответы [ 3 ]

0 голосов
/ 20 сентября 2019

Вы можете создать публичную функцию в ВМ, передать ей нужные параметры и затем вызвать нужный URL из репозитория.

См. Пример https://github.com/googlesamples/android-architecture-components/blob/master/BasicSample/app/src/main/java/com/example/android/persistence/viewmodel/ProductListViewModel.java

0 голосов
/ 21 сентября 2019

вы можете вызвать некоторый открытый метод из viewmodel и затем передать ему параметры. Примерно так:

viewmodel

class UserViewmodel: ViewModel() {

    fun callApi(userId: String) : Any {
      // Your method definition



        return result
    }
}

и в методе вызова действия / фрагмента через экземпляр viewmodel

class UserActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_user)

        val viewModel = ViewModelProviders.of(this).get(UserViewmodel::class.java)
        val result = viewModel.callApi("userId")
    }
}
0 голосов
/ 20 сентября 2019

Работа с компонентами архитектуры Android, такими как: View Model, LiveData и т. Д. Я хотел бы предложить вам следовать Официальному руководству от Android.

При использовании компонентов архитектуры Android длявызовите запрос API, как я пытаюсь достичь своей цели следующим образом:

  • Создайте один класс Repo, в этом классе инициализируйте интерфейс Retrofit (если используется Retrofit).Создайте функцию, которая вызывает необходимый API, обрабатывает ответ на запрос и возвращает живые данные.Создайте дополнительные функции для параметра, передаваемого с URL.
  • Создайте в этом классе один класс View Model, инициализируйте его над классом Repo.Создайте функцию, которая вызывает функцию класса репо, которая возвращает Live Data, и эта функция также возвращает LiveData.Создайте дополнительные функции для параметра, который будет передаваться в Repo для добавления с URL.
  • В вашем классе View (Activity / Fragment) инициализируйте класс View Model и передайте те параметры, которые являются обязательными параметрами URL.Вызовите функцию View Model, которая возвращает живые данные, и заметьте, что в вашем классе View.

Вы получите данные в своем классе просмотра, когда любое изменение появится в Live Data.

вышеЭто простая практика, но ее можно исправить, если сделать ответы общего характера в соответствии с вашими требованиями.

...