Как повторить вызов API в MVVM - PullRequest
1 голос
/ 02 июля 2019

Я использую шаблон MVVM для своего приложения для Android.Все выглядит так хорошо.Но когда происходит ошибка сети, мне нужно показать всплывающее сообщение с кнопкой «Повторить», которая, как ожидается, снова вызовет этот API.Проблема в том, что при нажатии кнопки «Повторить» он не знает, какой API вернул эту ошибку, чтобы повторить попытку.Может кто-нибудь дать мне совет?


/**
 * Created by Nguyen on 3/27/2019.
 *
 * This BaseFragment will contain the common functions which can be shared in all fragments.
 * All of the fragments in the app should be extended from this class
 */
abstract class BaseFragment : Fragment() {

    ...

    protected fun registerViewModel(viewModel: BaseViewModel) {

        ...

        viewModel.noNetworkErrorMessage().observe(this, Observer {
            it.consume {

                // I can add a listener here to handle when the Retry 
                // button is clicked
                DialogHelper.showNoInternetConnectionDialog(context) 
            }
        })

        ...

        viewModel.timedOutMessage().observe(this, Observer {
            it.consume {
                DialogHelper.showAutoDismissErrorPopup(
                    context,
                    getString(R.string.error_request_time_out) {
                        // When the retry button is clicked
                    }
                )
            }
        })
    }
    ...
}

1 Ответ

0 голосов
/ 02 июля 2019

Если вы используете Retrofit, вы получите необработанный запрос из метода ошибок.Таким образом, в методе просмотра модели вы можете передать URL.

Таким образом, сценарий будет таким:

YourViewModel extends ViewModel{
  MutableLiveData<String> url;
  .....
  MutableLiveData<String> timedOutMessage(){
    return url;
}

} 

Поэтому, когда произошла сетевая ошибка или ошибка тайм-аута, отправьте URL для просмотра для повторной попытки.

Я думаю, вы получите базовыйидея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...