如何在MVVM中重试API调用

时间:2019-07-02 02:34:10

标签: android mvvm

我正在为我的Android应用程序使用MVVM模式。一切看起来都很好。但是,当发生网络错误时,我需要显示带有“重试”按钮的弹出消息,该按钮应再次调用该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 :(得分:0)

如果您使用的是Retrofit,则会从错误方法获取原始请求。因此,在您的视图模型的方法中,您可以传递url。

因此情况将是:

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

} 

因此,当发生网络错误或超时错误时,请发送网址以进行重试。

我想您会明白的。