2010-08-23 74 views
2

我试图从Android活动打开对话框时收到此错误。谷歌搜索没有提供任何有用的解释。希望有人知道这个例外甚至意味着什么?

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 
} 

该代码没有做任何非常有趣的事情。当选择菜单项时,它会尝试显示一个对话框。代码从来没有达到创建对话的地步,所以我甚至没有机会搞砸了。关于活动的唯一有趣的事情是,真正的活动是TrackerEdit,它扩展了AlarmEditActivity,因此正在执行的代码位于活动的父级中。

+0

什么可能是有益的差异,如果您发布的代码 – Falmarri 2010-08-24 00:03:14

+0

你做所有这些类的?听起来像一个特定领域的问题。对于一般性问题以及较小的特定问题,Stackoverflow非常适用,但对于严重针对您的系统的大型复杂问题,这不是一个好的地方。尝试将问题缩小到更具体的问题,您将从社区获得更好的回应。 – mtmurdock 2010-08-24 00:55:08

+0

其中大部分都是android内置的活动 – Falmarri 2010-08-24 03:17:24

回答

8

埃德伯内特帮我弄清楚发生了什么事。我在这里为其他类似问题的人记录。

当我调试通过时,我错了;该对话框实际上正在创建,并且在对话框显示期间,我收到了该错误。原因是当我创建对话框时,我将getApplicationContext()作为Context传递给构造函数。

dialog = new AlarmEditDialog(getApplicationContext()); 

而是我需要传递活动,这本身就是一个上下文。

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

显然有:-)

相关问题