Как убрать индикатор выполнения из репозитория? - PullRequest
2 голосов
/ 05 марта 2020

Я использую шаблон MVVM с репозиторием для сетевого вызова.

Когда я нажимаю кнопку в моем представлении, он запускает метод сохранения / выборки данных в моей модели представления, который затем выполняет вызов в хранилище, в котором я выполняю сетевую операцию с использованием Retrofit.

Теперь я хотел бы отклонить мой индикатор выполнения с соответствующим сообщением (например, сохранено, ошибка и т. д. c. из моего репозитория (onResponse или onFailure), что я начал просмотр изнутри.

  public void onClick(View v) {
            ProgressDialog dialog = new ProgressDialog(getActivity());
            dialog.setMessage("saving...");
            dialog.show();
            cuttingUnitViewModel.saveProjectUnit();
        }

Можно ли делать то, что я делаю или Есть ли лучшая альтернатива?

Все, что я хочу сказать, что я хочу вернуть NETWORK STATE и DATA как из хранилища, как это сделать?

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Нет, неправильно выполнять View действия, такие как удаление ProgressBar в репозитории, так как этот класс предназначен только для работы с данными из разных источников, что создает тесную связь. Надлежащим решением было бы установить функции обратного вызова обратно в класс, в котором View присутствует из класса Repository через промежуточные слои, такие как ViewModel, до тех пор, пока он не достигнет слоя View, а затем отклонить ProgressBar там.

0 голосов
/ 05 марта 2020

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

Я предлагаю вам создать MutableLiveData объект для вашего ответа в вашей активности ViewModel, затем передайте этот объект в свой репозиторий, чтобы, когда ваша модернизация завершила ваш вызов, вы могли опубликовать результат на своем объекте livingata.

И в своей деятельности вы должны наблюдать за этими liveata на предмет изменений. Итак, когда вы получаете результат и публикуете новое значение, то в onChanged() наблюдателя liveata активности вы можете получить результат и даже заставить свой индикатор выполнения исчезнуть.

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

...