2011-06-30 49 views
1

我開發了一個應用程序,其中我有4個選項卡A,B,C,D。每個選項卡都包含一個活動。在第四個選項卡D中,我添加了一個ActivityGroup,其中有3個活動X,Y,Z。在第四個Tab中,我添加了活動組,我得到了StackOverflow錯誤。請幫我解決這個錯誤。如何解決android中的BadTokenException錯誤?

這是我的堆棧跟蹤: -

06-30 18:22:26.521: ERROR/AndroidRuntime(1293): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] 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 

我這是在構建TABS -------

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);  
+0

僅提供logcat的消息不會是足夠的信息來回答你的問題使用任何其中的活動。顯示選項卡的相關代碼以及如何構建所有選項卡。 – binnyb

回答

1

我沒有看到任何Stackoverflow Error(現在的樣子你確定你知道什麼是Stackoverflow?)...你的問題是,你試圖在已經完成或者不在前臺的活動中顯示一個對話框。至少,這是我們可以從logcat trace中推斷出來的。

+0

事實上,經過一定次數的操作後,它拋出異常。最後一次拋出異常時,我試圖點擊微調。但我試圖找出異常的原因。有時它顯示android.view.windowmanager badtokenexception和有時候是StackOverflow異常。 – Prachi

+1

好吧,所以在Java(以及Android)中,當您遞歸調用方法時,通常會顯示StackOverflow異常。例如,這會導致StackOverflow異常:'void name(){name();}'。所以看看你的代碼,看看你是否正在做這樣的事情。 – Cristian

+0

嗨克里斯蒂安!其實我在第四個標籤中遇到了這個問題,我正在瀏覽一系列的活動。我正在瀏覽像這樣的東西.... FourthActivity-> X和Y.然後從Y-> FourthActivity然後X-> Z,Z-> FourthActivity。我無法理解我究竟在哪裏出錯,有時甚至在繪製視圖時拋出異常。 – Prachi

1

正如@Cristian所提到的,我也可以說你試圖在活動內部顯示一個對話框或者引用當前活動的上下文,但是當你使用帶有Tabs的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(); 

現在,每當你應該參考背景,然後用這個活動上下文值。

+0

嗨帕雷什!我試過了,但問題仍然存在。我可以打開對話框,但是在拋出StackOverflowException異常的幾次操作之後再次打開對話框。 – Prachi

+0

您正在第四個選項卡中設置FourthActivity.class,它是一個組類還是單個活動類? –

+0

帕雷什它是一個ActivityGroup。 – Prachi

0

這是一個常見錯誤,可以在對話框中使用'getApplicationContext'而不是'this'修復。另見FATAL EXCEPTION: main。當您(從對話框中)嘗試使用啓動對話框的活動的上下文時(如果該活動不再位於前景中),將發生該錯誤。

-1

,你必須創建標籤使靜態上下文和要創建對話框

相關問題