3

我想从一个处理程序创建一个警报对话框,当线程终止时会发出信号这是我的代码,它导致:

android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 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;
        }
        }


         }
     };
4

3 回答 3

5

问题可能是 getApplicationContext() 不是你的活动上下文。

    alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
    //should be change to
    alertDialog = new AlertDialog.Builder( YourActivity.this ).create();
于 2012-04-25T14:16:50.610 回答
3

您不能使用应用程序上下文来创建对话框。请改用 Activity 上下文。

此外,这种创建对话框的方式必然会在以后产生问题,尤其是在活动因任何原因重新启动时。您应该使用对话框片段或托管对话框(活动的showDialog()方法)

于 2012-04-25T14:11:23.870 回答
1

我确定您正在 Android 中执行 WebService 请求/响应,那么我建议您在 android 中实现称为Painless Threading的AsyncTask ,因为您无需担心线程管理。

仅供参考,内部doInBackground()- 编写网络调用逻辑,内部onPostExecute()- 显示您要显示的警报对话框。

于 2012-04-25T14:14:31.200 回答