在Handler内创建警示对话框

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

android.view.WindowManager $ BadTokenException:无法添加窗口-- 令牌为空不是应用程序

请注意,这个错误可能是由于尝试在非活动上下文中创建对话框而引起的。
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个回答

5
问题可能是getApplicationContext()不是你的活动上下文。
    alertDialog = new AlertDialog.Builder(getApplicationContext()).create();
    //should be change to
    alertDialog = new AlertDialog.Builder( YourActivity.this ).create();

3

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

此外,这种创建对话框的方式很可能会在以后出现问题,特别是如果活动由于任何原因重新启动。您应该使用对话框片段或托管对话框(活动的showDialog()方法)。


1

我确定你正在Android中进行WebService请求/响应,那么我建议您实现AsyncTask,它在Android中被称为Painless Threading,因为您不需要担心线程管理。

顺便说一句,在doInBackground()中编写Web调用逻辑,在onPostExecute()中显示要显示的警报对话框。


请注意,答案并不是那么简单。Android的Activity生命周期会对AsyncTask造成问题-请参见https://dev59.com/YXA75IYBdhLWcg3wUHWQ以获取更多详细信息。 - hrnt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接