我尝试执行以下代码,但它产生了问题。没有它,代码就可以正常工作。我想要弹出一个对话框,要求用户在 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
在线程中显示Toast
或Alert Dialog
。
runOnUiThread(new Runnable()
{
@Override
public void run()
{
showAlert();
}
});
您正在从工作线程调用它。您需要从主线程中调用 Toast.makeText() 或 Alert Dialog。您也可以使用处理程序。
关于android - Alertdialog 不起作用,它在 Android 中产生异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15547124/