2011-06-30 4 views
1

私は4つのタブA、B、C、Dを持つアプリケーションを開発しました。各タブにはアクティビティが含まれています。 4番目のタブDではアクティビティグループを追加しました.3つのアクティビティX、Y、Zを追加しています。アクティビティグループを追加した4番目のタブでは、StackOverflowエラーが発生しています。アンドロイドで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を構築AM WAY IS -------

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

を作成する場所アクティビティ内の任意の場所を使用します。タブの関連するコードと、すべてのタブをどのように構築しているかを示します。 – binnyb

答えて

1

私はどのStackoverflow Errorである(表示されませんあなたは確かにStackoverflowが何であるか知っていますか?)あなたの問題は、何とかして、すでに完了しているか、フォアグラウンドにないアクティビティの中にダイアログを表示しようとしていることです。少なくとも、これはあなたのlogcatトレースから推測できるものです。

+0

実際にはいくつかの操作の後に例外がスローされています。例外がスローされました。例外の原因を調べようとしました。 StackOverflow例外が発生することがあります。 – Prachi

+1

Javaの場合(つまりAndroidの場合)、StackOverflow例外は通常、メソッドを再帰的に呼び出すときに表示されます。例えば、これはStackOverflow例外を引き起こします: 'void name(){name();}'。だからあなたのコードを見て、どういうわけかあなたがそのようなことをしているかどうかを見てください。 – Cristian

+0

こんにちはクリスチャン!実際には、私が一連の活動を通してナビゲートしている第4のタブでこの問題を抱えています。私はこのような何かをナビゲートしています。FourthActivity-> XとY、次にY-> FourthActivity、そしてX-> Z、Z-> FourthActivity。実際に私が間違っている場所を理解することができません。時には例外が表示されている場合でも例外がスローされます。 – Prachi

1

@Cristianは、現在のアクティビティのアクティビティや参照コンテキスト内にダイアログを表示しようとしているとも言えますが、Tabを使用して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

こんにちはParesh !!私はそれを試してみましたが、問題はまだです。私はダイアログを開くことができますが、いくつかの操作の後にStackOverflowExceptionをスローしています。 – Prachi

+0

FourthActivity.classを4番目のタブに設定しているため、グループクラスまたは単一のアクティビティクラスですか? –

+0

アクショングループです。 – Prachi

0

これは、ダイアログで 'this'の代わりに 'getApplicationContext'を使用して修正できる一般的なエラーです。 FATAL EXCEPTION: mainも参照してください。このエラーは、(ダイアログからの)ダイアログを開始したアクティビティのコンテキストを、そのアクティビティがフォアグラウンドになくなったときに使用しようとしたときに発生します。あなたは、タブを作成してい

-1

は、静的コンテキストを作成し、あなたがあなたの質問に答えるための十分な情報ではありませんだけでLogCatメッセージを提供するダイアログボックス

関連する問題