2010-08-23 9 views
2

Android 활동에서 대화 상자를 여는 중이 오류가 발생했습니다. Google 검색은 도움이되는 해석을 제공하지 않았습니다. 누군가에게이 예외가 무엇을 의미하는지 알기를 원합니까?

08-21 00:42:48.515: ERROR/AndroidRuntime(880): Uncaught handler: thread main exiting due to uncaught exception 
08-21 00:42:48.595: ERROR/AndroidRuntime(880): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.ViewRoot.setView(ViewRoot.java:429) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:178) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.app.Dialog.show(Dialog.java:231) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.app.Activity.showDialog(Activity.java:2407) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at net.sosiouxme.WhenDidI.custom.AlarmEditActivity.openNewAlarmDialog(AlarmEditActivity.java:179) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at net.sosiouxme.WhenDidI.custom.AlarmEditActivity.onOptionsItemSelected(AlarmEditActivity.java:188) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at net.sosiouxme.WhenDidI.activity.TrackerEdit.onOptionsItemSelected(TrackerEdit.java:146) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.app.Activity.onMenuItemSelected(Activity.java:2085) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:820) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:139) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:813) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.view.menu.IconMenuView.invokeItem(IconMenuView.java:519) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.view.menu.IconMenuItemView.performClick(IconMenuItemView.java:122) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.View.onTouchEvent(View.java:3828) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.widget.TextView.onTouchEvent(TextView.java:6291) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.View.dispatchTouchEvent(View.java:3368) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
08-21 00:42:48.595: ERROR/AndroidRuntime(880):  at android.os.Handler.dispatchMessage(Handler.java:99)` 

TrackerEdit가 AlarmEditActivity를 상속 받았다는 것을 아는 것이 도움이 될 수 있습니다. TrackerEdit에는 OptionsMenu가 있으며이 메뉴에서 옵션을 선택하면 openDialog를 통해 대화 상자가 표시됩니다. 스택 트레이스는 대화 상자를 생성 할 기회가 생기기 전에 충돌이 발생했음을 나타냅니다. 어떤 도움을 주시면 감사하겠습니다.

편집 - 나는 내 클래스() net.sosiouxme 시작하고 onOptionsItemSelected를 받고 Activity.showDialog라는 부분이었다 꽤 명확 거라고 생각하지만 그래, 괜찮아, 일부 코드가 꽤 도움이 될 수 있습니다. 하지만 여기 AlarmEditActivity의 비트가 있습니다 :

/* ***************************** event handling *************************** */ 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.new_alarm: 
     openNewAlarmDialog(); 
     break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

/* 
* Open dialog for user to create a new alarm 
*/ 
public void openNewAlarmDialog() { 
    Alarm alarm = new Alarm(mTracker.getId()); 
    alarm.setIvalWeeks(1); 
    mAlarmToEdit = alarm; 
    mViewOfAlarmToEdit = null; 
    showDialog(ALARM_DIALOG); // which is 0 
} 

코드는 아무 것도 재미 있지 않습니다. 메뉴 항목을 선택하면 대화 상자가 표시됩니다. 이 코드는 대화가 만들어 질 지점에 도달하지 못했고, 그래서 그것을 망칠 기회조차 없었습니다. 활동에 대해 원격으로 흥미로운 점은 실제 활동이 AlarmEditActivity를 확장하는 TrackerEdit이므로 실행중인 코드가 활동의 상위에 있다는 것입니다.

+0

가 도움이 무엇을 할 수 :-) 차이는 코드 – Falmarri

+0

를 게시 할 경우 다음의 모든 클래스를 했습니까 거기있어? 도메인과 관련된 문제 인 것 같습니다. Stackoverflow는 일반적인 질문 및 작은 특정 질문에는 적합하지만 시스템에 크게 영향을 미치는 복잡한 복잡한 문제에 대해서는 적합하지 않습니다. 좀 더 구체적으로 질문을 좁히려면 커뮤니티에서 더 좋은 반응을 얻으십시오. – mtmurdock

+0

대부분은 활동에 내장 된 안드로이드입니다. – Falmarri

답변

8

에드 버넷 (Ed Burnett)은 무슨 일이 일어나고 있는지 파악하는 것을 도왔습니다. 비슷한 문제가있는 다른 모든 사람들을 위해 여기에 기록합니다.

내가 디버깅 할 때 밖으로 나왔다. 틀렸다. 대화 상자가 실제로 생성되고 대화 상자가 표시되는 동안 오류가 발생했습니다. 이유는 대화 상자를 만들 때 getApplicationContext()를 컨텍스트로 생성자에 전달했기 때문입니다.

dialog = new AlarmEditDialog(getApplicationContext()); 

대신 그 자체가 컨텍스트 인 활동을 전달해야했습니다.

dialog = new AlarmEditDialog(this); // the Activity 

분명

관련 문제