【发布时间】:2026-02-01 10:45:02
【问题描述】:
我正在使用 RxJava 和 retorifit 进行 api 调用。但是,当我在方法成功后关闭进度对话框时,应用程序崩溃/停止。如何正确处理这种情况。
以不影响 UI 的方式处理此 api 调用的最佳方法是什么。
这是我的代码:
disposable.add(
apiInterface
.getWorkOrders(TbmUtils.getUserToken(TbmApp.get().getContext()),TbmUtils.getUserId(TbmApp.get().getContext()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableSingleObserver<HomeWorkOrderModel>() {
@Override
public void onSuccess(HomeWorkOrderModel workOrderModel) {
progressdialog.dismiss(); //Here it crash
Gson g=new Gson();
Log.v(TAG," Response: "+g.toJson(workOrderModel) );
if(workOrderModel!=null){
if(workOrderModel.getStatus()!=null){
if(workOrderModel.getStatus().equals(TbmConstants.STATUS_TRUE)){
if(workOrderModel.getResult()!=null){
venuetotal.set(workOrderModel.getResult().getTotalVenues());
workorders.set(workOrderModel.getResult().getTotalOrders());
name.set(TbmUtils.getUserName(TbmApp.get().getContext()));
if(workOrderModel.getResult().getOrders().size()!=0){
homeWorkOrderAdapter.addListing(workOrderModel.getResult().getOrders());
}
}
}else {
ShowToast(workOrderModel.getMessage());
}
}
}
}
@Override
public void onError(Throwable e) {
// HideProgress();
showError(e);
}
}
)
);
这是日志文件:
java.lang.IllegalStateException:调度程序抛出致命异常。 07-26 16:10:06.381 28577-28577/com.tbmsr W/System.err: 在 io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:111) 07-26 16:10:06.381 28577-28577/com.tbmsr W/System.err: 在 android.os.Handler.handleCallback(Handler.java:789) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.os.Handler.dispatchMessage(Handler.java:98) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.os.Looper.loop(Looper.java:164) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.app.ActivityThread.main(ActivityThread.java:6541) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at java.lang.reflect.Method.invoke(Native Method) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 由: java.lang.IllegalArgumentException: View=DecorView@3d338b[] 未附加到窗口管理器 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:123) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.app.Dialog.dismissDialog(Dialog.java:371) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 android.app.Dialog.dismiss(Dialog.java:354) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 com.tbmsr.ui.home.HomeViewModel$1.onSuccess(HomeViewModel.java:106) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 com.tbmsr.ui.home.HomeViewModel$1.onSuccess(HomeViewModel.java:100) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: 在 io.reactivex.internal.operators.single.SingleObserveOn$ObserveOnSingleObserver.run(SingleObserveOn.java:81) 07-26 16:10:06.383 28577-28577/com.tbmsr W/System.err: at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:109)
【问题讨论】:
-
崩溃日志会更有帮助。
-
请发布崩溃日志,因为没有日志就无法为您提供帮助,但是进度对话框崩溃的常见原因之一与您创建对话框的 context 有关,当您关闭上下文不再可用的对话框时,它会导致活动 找不到窗口管理器异常。
-
我应该怎么做才能处理这个 Rajat Beck
-
从哪里显示进度对话框?
标签: android rx-java progressdialog