Как исправить ошибку BadTokenException в Android? - PullRequest
1 голос
/ 30 июня 2011

Я разработал приложение, в котором у меня есть 4 вкладки A, B, C, D.Каждая из вкладок содержит активность.На четвертой вкладке D я добавил ActivityGroup, в которой у меня есть еще 3 действия X, Y, Z. На четвертой вкладке, где я добавил группу действий, я получаю сообщение об ошибке StackOverflow. Пожалуйста, помогите мне исправить эту ошибку.

это мой стек. Трасса: -

06-30 18:22:26.521: ERROR/AndroidRuntime(1293): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@62668448 is not valid; is your activity running?
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewRoot.setView(ViewRoot.java:468)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Dialog.show(Dialog.java:239)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.widget.Spinner.performClick(Spinner.java:257)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.View.onTouchEvent(View.java:4179)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.View.dispatchTouchEvent(View.java:3709)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
06-30 18:22:26.521: ERROR/AndroidRuntime(1293):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow

ЭТО ПУТЬ, КОТОРЫЙ Я СОЗДАЮ ТАБ - -------

Resources res = getResources();   
TabHost tabHost = getTabHost();  // The activity TabHost
TabHost.TabSpec spec;  // Reusable TabSpec for each tabO
Intent intent;  // Reusable Intent for each tab

// Create an Intent to launch an Activity for the tab (to be reused)

intent = new Intent().setClass(this,FirstActivity.class);
spec = tabHost.newTabSpec("tab_First");
spec.setIndicator("First",res.getDrawable(R.drawable.ic_tab));
spec.setContent(intent);      
tabHost.addTab(spec);

// 2nd tab
intent = new Intent().setClass(this,SecondActivity.class);
spec = tabHost.newTabSpec("tab_Second");
spec.setIndicator("Second",res.getDrawable(R.drawable.ic_tab));
spec.setContent(intent);
tabHost.addTab(spec);

//3rd Tab
intent = new Intent().setClass(this,ThirdActivity.class);
spec = tabHost.newTabSpec("tab_Third");
spec.setIndicator("Third",res.getDrawable(R.drawable.ic_tab));
spec.setContent(intent);
tabHost.addTab(spec);        

// 4th tab    
intent = new Intent().setClass(this,FourthActivity.class);
spec = tabHost.newTabSpec("tab_Fourth");
spec.setIndicator("Fourth",res.getDrawable(R.drawable.ic_create));
spec.setContent(intent);
tabHost.addTab(spec);           

tabHost.setCurrentTab(0);     

Ответы [ 4 ]

1 голос
/ 30 июня 2011

Как уже упоминал @Cristian, я также могу сказать, что вы пытаетесь отобразить диалоговое окно внутри действия или ссылаясь на контекст текущего действия, но всякий раз, когда вы должны использовать контекст при использовании ActivityGroup с вкладками, в это время вам нужноиспользовать getParent() для получения контекста родительского представления.

При отображении диалога вам необходим контекст родительского действия:

  // define at Global level and use it inside the activity whenever you want to refer                
  //activity context;
  private Activity activity;  

  //Write this inside onCreate() method.        
  activity = getParent();

Теперь, когда вы должны ссылаться на контекст, используйтезначение этого действия контекста.

1 голос
/ 30 июня 2011

Я не вижу Ошибка Stackoverflow (вы уверены, что знаете, что такое Stackoverflow?) ... ваша проблема в том, что каким-то образом вы пытаетесь отобразить диалог внутри действия, которое уже закончен или не на переднем плане. По крайней мере, это то, что мы можем вывести из вашей трассировки logcat.

0 голосов
/ 21 марта 2012

, где у вас есть создание вкладок, создайте статический контекст и используйте любое место в деятельности, где вы хотите создать диалоговое окно

0 голосов
/ 30 июня 2011

Это распространенная ошибка, которая может быть исправлена ​​с помощью 'getApplicationContext' вместо 'this' в вашем диалоге.См. Также FATAL EXCEPTION: main .Ошибка возникает, когда вы (из диалогового окна) пытаетесь использовать контекст действия, которое запустило диалоговое окно, когда это действие больше не находится на переднем плане.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...