如何使用 Retrofit 2 更正片段内的句柄 Dialog.dismiss()
How to correct handle Dialog.dismiss() inside Fragment using Retrofit 2
我正在使用 Retrofit 2 在 Fragment 中向我的服务器发出 POST 请求,如下所示:
Call<MyResponse> call = apiService.myPost(params);
call.enqueue(myCallback);
mProgress = ProgressDialog.show(getActivity(), "Working", "Working"", true);
我想在请求完成时关闭 ProgressDialog,如您在此处所见:
class myCallback {
onResponse() {
mProgress.dismiss();
}
onFailture() {
mProgress.dismiss();
}
}
但是这种方法效果不佳,因为用户可以旋转或离开当前 Activity,导致此错误:
Fatal Exception: java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{1ec6c6d0 V.E..... R.....ID 0,0-513,242} not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)
at android.app.Dialog.dismissDialog(Dialog.java:341)
at android.app.Dialog.dismiss(Dialog.java:324)
在这种情况下如何正确关闭对话框?
您应该在 Fragment 与其 Activity 分离时关闭该对话框,或者添加一个检查以查看 Fragment 是否仍然附加。下面的示例调用 isAdded() 来检查这一点。
onResponse() {
if (isAdded()) {
mProgress.dismiss();
}
}
Call<MyResponse> call = apiService.myPost(params);
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Response<Repo> response) {
mProgress.dismiss();
}
@Override
public void onFailure(Throwable t) {
mProgress.dismiss();
}
});
我正在使用 Retrofit 2 在 Fragment 中向我的服务器发出 POST 请求,如下所示:
Call<MyResponse> call = apiService.myPost(params);
call.enqueue(myCallback);
mProgress = ProgressDialog.show(getActivity(), "Working", "Working"", true);
我想在请求完成时关闭 ProgressDialog,如您在此处所见:
class myCallback {
onResponse() {
mProgress.dismiss();
}
onFailture() {
mProgress.dismiss();
}
}
但是这种方法效果不佳,因为用户可以旋转或离开当前 Activity,导致此错误:
Fatal Exception: java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{1ec6c6d0 V.E..... R.....ID 0,0-513,242} not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)
at android.app.Dialog.dismissDialog(Dialog.java:341)
at android.app.Dialog.dismiss(Dialog.java:324)
在这种情况下如何正确关闭对话框?
您应该在 Fragment 与其 Activity 分离时关闭该对话框,或者添加一个检查以查看 Fragment 是否仍然附加。下面的示例调用 isAdded() 来检查这一点。
onResponse() {
if (isAdded()) {
mProgress.dismiss();
}
}
Call<MyResponse> call = apiService.myPost(params);
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Response<Repo> response) {
mProgress.dismiss();
}
@Override
public void onFailure(Throwable t) {
mProgress.dismiss();
}
});