Rexb
Rexb

Reputation: 445

Android Spinner crashes on tapping

I have a spinner that populates list of options properly at first. Then when I switch the activity and come back and tap the spinner the app crashes (see log below).

        spinner1 = (Spinner) view.findViewById(R.id.fldWithSpinner1);


        ArrayAdapter<?> aa = new ArrayAdapter<Object>(LocationsUI.this,
                android.R.layout.simple_spinner_item, 
                availableLocations);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinner1.setAdapter(aa);

Everytime when I switch to LocationsUI the spinner is created. The spinner works ok only at the first time LocationsUI is displayed, after that every time when I tap on the spinner after the LocationsUI is re-displayed, it would crash:

        10-11 22:35:20.060: E/AndroidRuntime(30904): FATAL EXCEPTION: main
    10-11 22:35:20.060: E/AndroidRuntime(30904): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@407f6d50 is not valid; is your activity running?
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.view.ViewRoot.setView(ViewRoot.java:538)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:203)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.view.Window$LocalWindowManager.addView(Window.java:424)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.app.Dialog.show(Dialog.java:241)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.app.AlertDialog$Builder.show(AlertDialog.java:823)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.widget.Spinner.performClick(Spinner.java:261)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.view.View$PerformClick.run(View.java:9249)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.os.Handler.handleCallback(Handler.java:587)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.os.Handler.dispatchMessage(Handler.java:92)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.os.Looper.loop(Looper.java:130)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at android.app.ActivityThread.main(ActivityThread.java:3691)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at java.lang.reflect.Method.invokeNative(Native Method)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at java.lang.reflect.Method.invoke(Method.java:507)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
    10-11 22:35:20.060: E/AndroidRuntime(30904):    at dalvik.system.NativeStart.main(Native Method)
    10-11 22:35:20.080: E/InputDispatcher(139): channel '40abf270 com.sw.android/com.sw.MyLocAppActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
    10-11 22:35:20.080: E/InputDispatcher(139): channel '40abf270 com.sw.android/com.sw.MyLocAppActivity (server)' ~ Channel is unrecoverably broken and will be disposed!

Can you please show me the right direction to fix this issue?

Upvotes: 0

Views: 748

Answers (1)

Neha.R
Neha.R

Reputation: 513

As your Logcat says : android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@407f6d50 is not valid; is your activity running?

This can occur when you are showing the dialog for a context that no longer exists. Here is the link which can explain you what you doing wrong exactly : http://dimitar.me/android-displaying-dialogs-from-background-threads/

and here is the code that helps you from the same link :

private Handler myHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    switch (msg.what) {
      case DISPLAY_DLG:
        if (!isFinishing()) {
        showDialog(MY_DIALOG);
        }
      break;
    }
  }
};

Upvotes: 1

Related Questions