Crashlytics | android.view.WindowManager$BadTokenException

52 Views Asked by At

there. I want to ask about BadTokenException.

android.view.WindowManager$BadTokenException - Unable to add window -- token null is not valid; is your activity running?

android.view.ViewRootImpl.setView (ViewRootImpl.java:1743)
android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:524)
android.view.WindowManagerImpl.addView (WindowManagerImpl.java:150)
android.widget.PopupWindow.invokePopup (PopupWindow.java:1689)
android.widget.PopupWindow.showAtLocation (PopupWindow.java:1409)
android.widget.PopupWindow.showAtLocation (PopupWindow.java:1375)
com.android.internal.widget.floatingtoolbar.LocalFloatingToolbarPopup.show (LocalFloatingToolbarPopup.java:505)
com.android.internal.widget.floatingtoolbar.LocalFloatingToolbarPopup.show (LocalFloatingToolbarPopup.java:470)
com.android.internal.widget.floatingtoolbar.FloatingToolbar.doShow (FloatingToolbar.java:280)
com.android.internal.widget.floatingtoolbar.FloatingToolbar.show (FloatingToolbar.java:201)
com.android.internal.view.FloatingActionMode$FloatingToolbarVisibilityHelper.updateToolbarVisibility (FloatingActionMode.java:404)
com.android.internal.view.FloatingActionMode.repositionToolbar (FloatingActionMode.java:235)
com.android.internal.view.FloatingActionMode.updateViewLocationInWindow (FloatingActionMode.java:178)
com.android.internal.view.FloatingActionMode.invalidateContentRect (FloatingActionMode.java:162)
com.android.internal.view.FloatingActionMode.invalidate (FloatingActionMode.java:154)
com.android.internal.policy.DecorView.setHandledFloatingActionMode (DecorView.java:2707)
com.android.internal.policy.DecorView.setHandledActionMode (DecorView.java:2532)
com.android.internal.policy.DecorView.startActionMode (DecorView.java:1280)
com.android.internal.policy.DecorView.startActionModeForChild (DecorView.java:1234)
android.view.ViewGroup.startActionModeForChild (ViewGroup.java:1045)

The dialog uses activityContext rather than applicationContext and is restricted to isFinishing, but it keeps happening. Is dialog being used incorrectly?

class ChildActivity : BaseActivity() {
  showDialog("title", "contents")
} 
open class BaseActivity : AppCompatActivity() {

   fun showDialog(title: String, contents:String) {
          if (!isFinishing) {
             val dialog = Dialog(this) 
             dialog.show()
      }
   }
}
1

There are 1 best solutions below

2
jokuskay On
class ChildActivity : BaseActivity() {
  showDialog("title", "contents")
} 

Is this the actual code that throws the exception? If so, you're using it incorrectly - showDialog is being called when ChildActivity gets constructed. Consider moving it to another place, like onResume():

class ChildActivity : BaseActivity() {
  fun onResume() {
    showDialog("title", "contents")
  }
}