removeField
函数发出异步HTTP请求。这一切都没关系,除非我想按下后退按钮并想要发出请求。
如何点击后退按钮,然后执行所有请求并等待成功响应,最后执行后退操作?
DetailsScreen.java
@Override
public void backButtonTouched() {
getActivity().onBackPressed();
((DetailsScreenPresenter) presenter).backButtonTouched();
}
DetailsScreenPresenter.java
@Override
public void backButtonTouched() {
if (orderFields != null && orderFields.size() > 0) {
for (OrderField orderField : orderFields) {
removeField(order.getId(), orderField.getId());
}
}
}
答案 0 :(得分:0)
在致电getActivity().onBackPressed();
之前,您必须等待所有请求完成。
您似乎正在使用MVP,如果是这种情况,我建议等待请求的回调,通知演示者,然后演示者可以调用类似((DetailsScreen) view).getActivity().finish();
的内容。
另外,我认为在进程正在进行时显示加载以及避免再次启动整个事件的标志非常重要。类似的东西:
DetailsScreen.java
@Override
public void backButtonTouched() {
((DetailsScreenPresenter) presenter).backButtonTouched();
}
DetailsScreenPresenter.java
@Override
public void backButtonTouched() {
if (finishing) return;
finishing = true;
view.showProgress();
if (orderFields != null && orderFields.size() > 0) {
for (OrderField orderField : orderFields) {
removeField(order.getId(), orderField.getId());
}
}
}
// call something like this when the requests are done:
public void requestsCompleted() {
((DetailsScreen) view).getActivity().finish();
}
我希望这会有所帮助。
答案 1 :(得分:0)
通过overRiding onBackPressed()方法做到这一点,它是一个简单的解决方案,并且工作顺利
@Override
public void onBackPressed() {
yourReuest{
onSuccess(){
super.onBackPressed();
}
onError(){
Toast ERROR
}
}
}