android - Alertdialog 不起作用,它在 Android 中产生异常

标签 android runtime android-alertdialog

我尝试执行以下代码,但它产生了问题。没有它,代码就可以正常工作。我想要弹出一个对话框,要求用户在 Wifi 关闭时启用它。

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.welcome);
    Thread timer = new Thread(){
        public void run(){
            try{
                sleep(2000);                    
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            finally{                    
                showAlert();                    
            }
        }
    };
    timer.start();
}

}

public void showAlert() {

    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

    // set title
    alertDialogBuilder.setTitle("Your Title");

    // set dialog message
    alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            // if this button is clicked, close
                            // current activity
                            Welcome.this.finish();
                        }
                    })
            .setNegativeButton("No", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            });

    // create alert dialog
    AlertDialog alertDialog = alertDialogBuilder.create();


        // show it
        alertDialog.show();
}

这是日志历史记录,注释行中的 ProgressDialog 代码也抛出同样的错误!:

11:46:57.306: E/AndroidRuntime(2140): FATAL EXCEPTION: Thread-141 
11:46:57.306: E/AndroidRuntime(2140): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
11:46:57.306: E/AndroidRuntime(2140):   at android.os.Handler.<init>(Handler.java:197)
11:46:57.306: E/AndroidRuntime(2140):   at android.os.Handler.<init>(Handler.java:111)
11:46:57.306: E/AndroidRuntime(2140):   at android.app.Dialog.<init>(Dialog.java:107)
11:46:57.306: E/AndroidRuntime(2140):   at android.app.AlertDialog.<init>(AlertDialog.java:114)
11:46:57.306: E/AndroidRuntime(2140):   at android.app.AlertDialog$Builder.create(AlertDialog.java:931)
11:46:57.306: E/AndroidRuntime(2140):   at com.example.core4voipmobiledialer.Welcome.showAlert(Welcome.java:116)
11:46:57.306: E/AndroidRuntime(2140):   at com.example.core4voipmobiledialer.Welcome$1.run(Welcome.java:35)

最佳答案

使用runOnUiThread在线程中显示ToastAlert Dialog

runOnUiThread(new Runnable() 
{
  @Override
  public void run() 
  {
     showAlert();          
  }
});

您正在从工作线程调用它。您需要从主线程中调用 Toast.makeText() 或 Alert Dialog。您也可以使用处理程序。

关于android - Alertdialog 不起作用,它在 Android 中产生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547124/

相关文章:

android - Material 成分确认对话框

java - 将整数颜色值转换为 RGB

java - 带有淡入淡出 ImageView 动画的启动画面

java - 启动 Program Files 文件夹中的程序

linux - Linux 上的 .NET Core 运行时包存储

java - 键盘隐藏 BottomSheetDialog

android - 从 Android 甜蜜警报对话框中删除 "OK"按钮

android - 重新加载应用程序时未关闭 WebSocket(React Native)

android - 如何从 SD 卡获取文件夹的完整路径?

android - 运行时位置权限 - GoogleApiClient 尚未连接