gpt4 book ai didi

android - 在异步线程中启动对话框时出现 BadTokenException

转载 作者:行者123 更新时间:2023-11-29 21:49:01 26 4
gpt4 key购买 nike

我有一个建立异步连接的 Activity ,如下所示:

    new Thread(new Runnable() {
public void run() {
try{
//Make Connection
}catch(Exception e){
runOnUiThread(new Runnable() { public void run() {
Dialogs.showErrorDialog(MyActivity.this); //I display an error dialog using this context
} });
}
}
}).start();

想象一下,连接真​​的很慢,我离开了启动这个线程的 Activity 。如果连接最终顺利,一切都很好,但如果连接失败,它会在启动对话框时崩溃,因为上下文不再存在。错误是:

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4068a558 is not valid; is your activity running?

如何避免这个错误?我想检测我的 Activity 是否仍然存在

1) 显示带有此上下文的对话框(如果我仍在屏幕上)

2) 显示带有 ApplicationContext 的 Toast(如果我在屏幕外)

编辑:对话框代码是这样的:

static public void showErrorDialog(Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(android.R.drawable.ic_dialog_alert);
builder.setTitle(R.string.error_title);
builder.setMessage(R.string.error_content);
builder.setPositiveButton(R.string.button_ok,null);
builder.show();
}

最佳答案

How to avoid this error?

我建议你使用这个:

runOnUiThread(new Runnable() { 
public void run() {
if (!(((Activity) context).isFinishing())) { // you need to pass Context.
Dialogs.showErrorDialog(context);
}
}
});

让我知道它是否有效。

注意:如果它不起作用,我建议您使用AsyncTask 而不是runOnUiThread()

关于android - 在异步线程中启动对话框时出现 BadTokenException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14952943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com