我想从一个处理程序创建一个警告对话框,当一个线程终止时它会发出信号,这是我的代码导致:
android.view.WindowManager $ BadTokenException:无法添加窗口 - token null不适用于应用程序
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (dialog != null)
{
dialog.dismiss();
dialog = null;
}
switch (serverResponseCode)
{
case 200:
{
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
alertDialog.setTitle("Super :)");
alertDialog.setMessage("Poza a fost trimisa cu success.");
alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
} });
alertDialog.show();
serverResponseCode = -1;
break;
}
default:
{
AlertDialog alertDialog;
alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
alertDialog.setTitle("Eroare :(");
alertDialog.setMessage("Eroare la trimiterea pozei.");
alertDialog.setButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
} });
alertDialog.show();
break;
}
}
}
};
答案 0 :(得分:5)
问题可能是getApplicationContext()不是你的活动上下文。
alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
//should be change to
alertDialog = new AlertDialog.Builder( YourActivity.this ).create();
答案 1 :(得分:3)
您无法使用应用程序上下文来创建对话框。使用活动上下文 代替。
此外,创建对话框的方式必然会在以后产生问题,尤其是在因任何原因重新启动活动时。您应该使用Dialog片段或托管对话框(Activity的showDialog()
方法)
答案 2 :(得分:1)
我确信您在Android内部正在进行WebService请求/响应,然后我建议您在android中实现AsyncTask,因为您不需要打扰Thread管理。
仅供参考,在doInBackground()
内 - 在onPostExecute()
内写下网络电话逻辑 - 显示您想要显示的警告对话框。