Проблема с использованием liveata в модели (MVVM) - PullRequest
0 голосов
/ 07 июля 2019

Я хочу реализовать приложение для Android с шаблоном MVVM.мое приложение имеет несколько действий и фрагментов.Каждое действие или фрагмент имеет собственное действие (Отправка запроса на сервер, Запрос в базу данных, Чтение из файла и т. д.).мое приложение имеет несколько модулей для взаимодействия с базой данных, сетью, файлом и т. д., проблема заключается в том, что некоторые действия требуют подключения к нескольким компонентам, а затем агрегирования их результатов и обновления LiveData, которые наблюдаются в поле зрения. можно ли написать универсальную оболочку, которая может использоваться во всех моих моделях viewMode?1004 * Активность public class RegisterPhoneActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityRegisterPhoneBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_register_phone); viewModel = ViewModelProviders.of(this).get(RegisterMobileViewModel.class); binding.setViewModel(viewModel); binding.setLifecycleOwner(this); viewModel.getResponse().observe(this, new Observer<BaseResponse>() { @Override public void onChanged(BaseResponse baseResponse) { //do something } }); } } ViewModel public class RegisterMobileViewModel extends ViewModel { public void onRegisterButtonClick() { BaseSender.getInstance().sendRequest(new RegisterCommand()); } public LiveData getResponse(){ BaseSender.getInstance.getResponse(); } } Модель (сетевая модель) public class BaseSender { //observed in Activity -- this design only works when i have a single network call private MutableLiveData<String> response = new MutableLiveData<>(); private static BaseSender instance; private BaseSender() { } public static BaseSender getInstance() { if (instance == null) { instance = new BaseSender(); } return instance; } private class SenderHolder extends AsyncTask<String, Void, String> { SenderHolder() { } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... strings) { // sending request to server } @Override protected void onPostExecute(String s) { response.setValue(s); } } public MutableLiveData getResponse() { return responseObject; } }

...