caused by: androidview.WindowManager$badTokenException: Unable to add window -- token null is not valid; is your activity running;?
时间: 2023-12-01 07:53:34 浏览: 87
这个错误通常是因为您尝试在一个没有有效窗口标记的上下文中添加窗口。这可能是因为您的Activity已经被销毁了,但您的应用程序仍然在尝试使用它。您可以尝试在添加窗口之前检查Activity是否已经完成。您可以使用以下代码检查:
```java
if (!isFinishing() && getWindow() != null) {
// 添加窗口
}
```
如果您使用的是Dialog或PopupWindow等对话框,可以确保使用Activity的上下文来创建它们,而不是使用ApplicationContext。
相关问题
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
这个错误通常是由于在Activity的生命周期函数还没有执行完毕时,就尝试在PopupWindow或Dialog中添加窗口导致的。具体来说,可能是在Activity的onCreate函数中尝试添加PopupWindow或Dialog,而此时Activity的生命周期函数还没有执行完毕,所以无法获取到正确的Window Token。解决方法是将PopupWindow或Dialog的添加操作放到Activity的onWindowFocusChanged函数中,这个函数会在Activity的生命周期函数全部执行完毕之后被调用,此时就可以获取到正确的Window Token了。
以下是一个示例代码:
```java
public class MainActivity extends AppCompatActivity {
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
// 在这里添加PopupWindow或Dialog
PopupWindow popupWindow = new PopupWindow(this);
View contentView = LayoutInflater.from(this).inflate(R.layout.popup_window, null);
popupWindow.setContentView(contentView);
popupWindow.showAsDropDown(mButton);
}
}
}
```
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
这看起来像是在 Android 开发过程中出现的一个错误。这个错误通常是因为在代码中尝试引用一个 Button 对象,但实际上该对象没有被正确初始化,因此出现了空指针异常。可能需要检查代码中是否正确初始化了对应的 Button 对象,并且确保在设置其点击事件监听器之前,该对象已经被正确加载完毕。此外,可以使用调试工具来进一步定位问题的具体位置。
阅读全文