0

我无法在 AsyncTask 中创建对话框。有人可以帮忙吗?我收到错误“android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application”。

这是我的代码:

    public class MainActivity extends Activity {
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    AsyncTaskTest at=new AsyncTaskTest();
                    at.execute();
            }   

            public class AsyncTaskTest extends AsyncTask<Void, String, Void> {
                    protected Void doInBackground(Void... vd){
                            try{
                                    String desc = "Show Dialog without error";
                                    publishProgress(desc);
                            }catch(Exception e){
                                    publishProgress("Error: "+e.toString());
                            }
                            return null;
                    }
                    protected void onProgressUpdate(String... msg) {
                            showDialog(msg[0]);
                    }
                    private void showDialog(String msg){
                    final AlertDialog.Builder alertBox = new AlertDialog.Builder(new ContextThemeWrapper(getApplicationContext(), android.R.style.Theme_Dialog));
                    alertBox.setMessage(msg);
                    alertBox.setCancelable(false)
                                    .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                                    public void onClick(DialogInterface dialog,int id){
                                            dialog.cancel();
                                    }
                            }).show();
                    }
            }
    }
4

3 回答 3

7

尝试改变

getApplicationContext()

至 :

MainActivity.this

为了:

final AlertDialog.Builder alertBox = new AlertDialog.Builder(new ContextThemeWrapper(getApplicationContext(), android.R.style.Theme_Dialog));
                    alertBox.setMessage(msg);
                    alertBox.setCancelable(false)
                                    .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                                    public void onClick(DialogInterface dialog,int id){
                                            dialog.cancel();
                                    }
                            }).show();
                    }
于 2013-05-27T08:18:47.303 回答
1

改用以下内容

                final AlertDialog.Builder alertBox = new AlertDialog.Builder(
                        YourActivity.this,
                                android.R.style.Theme_Dialog);
于 2013-05-27T08:13:45.637 回答
0
`

Handler handler=new Handler();

public class MainActivity extends Activity {
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    AsyncTaskTest at=new AsyncTaskTest();
                    at.execute();
            }   

            public class AsyncTaskTest extends AsyncTask<Void, String, Void> {
                    protected Void doInBackground(Void... vd){
                            try{
                                    String desc = "Show Dialog without error";
                                    publishProgress(desc);
                            }catch(Exception e){
                                    publishProgress("Error: "+e.toString());
                            }
                            return null;
                    }
                    protected void onProgressUpdate(String... msg) {
                          handler.postRunnable(new Runnable(){
                            showDialog(msg[0]);
                       });
                    }
                    private void showDialog(String msg){
                    final AlertDialog.Builder alertBox = new AlertDialog.Builder(new ContextThemeWrapper(getApplicationContext(), android.R.style.Theme_Dialog));
                    alertBox.setMessage(msg);
                    alertBox.setCancelable(false)
                                    .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                                    public void onClick(DialogInterface dialog,int id){
                                            dialog.cancel();
                                    }

                        }).show();
                    }
            }
    }`
于 2013-05-27T08:20:18.370 回答