0

I am using RxJava with retorifit for an api call. But when I dismiss the progress dialog after the success in the method the application crash/stopped. How to properly handle this situation.

Whats the best approach to handle this api call in such a way that It does not affect the UI.

Here is my code:

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);
            }
        }
    )
);

Here is the Log file:

java.lang.IllegalStateException: Fatal Exception thrown on Scheduler. 07-26 16:10:06.381 28577-28577/com.tbmsr W/System.err: at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:111) 07-26 16:10:06.381 28577-28577/com.tbmsr W/System.err: at android.os.Handler.handleCallback(Handler.java:789) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.os.Handler.dispatchMessage(Handler.java:98) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.os.Looper.loop(Looper.java:164) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at 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: at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: Caused by: java.lang.IllegalArgumentException: View=DecorView@3d338b[] not attached to window manager 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:485) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:394) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:123) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.app.Dialog.dismissDialog(Dialog.java:371) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at android.app.Dialog.dismiss(Dialog.java:354) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at com.tbmsr.ui.home.HomeViewModel$1.onSuccess(HomeViewModel.java:106) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at com.tbmsr.ui.home.HomeViewModel$1.onSuccess(HomeViewModel.java:100) 07-26 16:10:06.382 28577-28577/com.tbmsr W/System.err: at 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)

  • A crash log would be more helpful. – adam yong Jul 26 '19 at 08:19
  • Please post the crash log as it is not possible to help you without logs, however one of common reason's for progress dialog crash is related to **context** with which you created the dialog, when you are dismissing the dialog that context is no longer available and it causes activity **window manager not found exception**. – Rajat Beck Jul 26 '19 at 08:21
  • What should I do to handle this Rajat Beck – Ashish Singh Jul 26 '19 at 10:42
  • from where you are showing progressdialog ? – Nidhi Desai Jul 26 '19 at 11:58

1 Answers1

0

Caused by: java.lang.IllegalArgumentException: View=DecorView@3d338b[] not attached to window manager

is the exception which is the same exception that i was talking about in comments, to handle this you need to make sure that you dismiss your dialog on destroy of activity or fragment, and in your case it is coming because the activity is being destroyed before you reach onSuccess.

To get more info read this

Community
  • 1
  • 1
Rajat Beck
  • 1,523
  • 1
  • 14
  • 29