FernandoPaiva
FernandoPaiva

Reputation: 4462

AlertDialog.Builder inside AsyncTask throws an exception

I'm trying use AlertDialog.Builder inside AsyncTask and this throws are so stranger exception that I can't solve it. I want open this AlertDialog in onPostExecute

Here the problem:

11-26 15:27:35.805: E/AndroidRuntime(6286): FATAL EXCEPTION: main
11-26 15:27:35.805: E/AndroidRuntime(6286): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.view.ViewRootImpl.setView(ViewRootImpl.java:800)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.app.Dialog.show(Dialog.java:287)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at br.com.mypackage.myapp.act.CadastrarView$2.onPostExecute(CadastrarView.java:190)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at br.com.mypackage.myapp.act.CadastrarView$2.onPostExecute(CadastrarView.java:1)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.os.AsyncTask.finish(AsyncTask.java:631)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.os.Looper.loop(Looper.java:176)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at android.app.ActivityThread.main(ActivityThread.java:5419)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at java.lang.reflect.Method.invokeNative(Native Method)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at java.lang.reflect.Method.invoke(Method.java:525)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
11-26 15:27:35.805: E/AndroidRuntime(6286):     at dalvik.system.NativeStart.main(Native Method)

Here how I'm trying

new AsyncTask<String, Void, String>() {
    @Override
            protected String doInBackground(String... params) {
        add = new UsuarioDAO().insert(usuario, fotoPerfil);                                 
        return "executed";
    }

    @Override
            protected void onPostExecute(String result) {
        progress.dismiss(); 
        if(add){
            AlertDialog.Builder alert = new AlertDialog.Builder(getApplicationContext());
            alert.setTitle("Title");
            alert.setMessage("Obrigado por se cadastrar\n"
                             + "Uma mensagem de confirmação foi enviada para seu email\n");
            alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {                           
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            startActivity(new Intent(getApplicationContext(), LoginView.class));
                                        }
                                    });     
            AlertDialog dialog = alert.create();
            dialog.show();
        }else{
            Toast.makeText(CadastrarView.this, "Erro encontrado tentando adicionar conta", Toast.LENGTH_SHORT).show();
        }   
    }
}.execute("");

Upvotes: 0

Views: 413

Answers (1)

CommonsWare
CommonsWare

Reputation: 1007359

Replace getApplicationContext() with this or WhateverYourActivityIsCalled.this.

Only use getApplicationContext() when you know precisely why you are using getApplicationContext(). See this blog post by Dave Smith to learn more about the roles of different Context objects.

Upvotes: 1

Related Questions