2012-04-25 62 views
1

内创建警报对话框我想创建一个从处理器女巫的警告对话框被暗示当一个线程终止,这是我的代码巫婆导致处理器

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; 
     } 
     } 


     } 
    }; 

回答

3

不能使用应用程序上下文来创建对话框。改为使用活动上下文 。

另外,创建对话框的这种方式必然会在以后造成问题,特别是如果活动因任何原因而重新启动时。您应该用对话的片段,或管理对话框(活动的showDialog()法)

1

我相信你在做Android的内部WebService的请求/响应,那么我建议你实现AsyncTask这被称为Painless Threading在android系统,因为你不需要麻烦线程管理。

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

+2

太棒了!感到尴尬,因为这个答案不被接受。 – 2012-04-27 09:00:27

+0

请注意,答案并不是那么简单。 Android的Activity生命周期会导致AsyncTask问题 - 请参阅http://stackoverflow.com/questions/3357477/is-asynctask-really-conceptually-flawed-or-am-i-just-missing-something以获取更多详细信息。 – hrnt 2012-05-08 11:29:08

4

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

alertDialog = new AlertDialog.Builder(getApplicationContext()).create(); 
    //should be change to 
    alertDialog = new AlertDialog.Builder(YourActivity.this).create();