opc0de
opc0de

Reputation: 11768

Create Alert Dialog inside of Handler

I want to create an alert dialog from a handler which gets signaled when a thread terminates this is my code which causes:

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

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


         }
     };

Upvotes: 3

Views: 6134

Answers (3)

markwu
markwu

Reputation: 51

The problem probably is getApplicationContext() isn`t yout activity context.

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

Upvotes: 5

Paresh Mayani
Paresh Mayani

Reputation: 128428

I am sure you are doing WebService request/response inside the Android, then i would suggest you to implement AsyncTask which is known as Painless Threading in android because you don't need to bother about Thread management.

FYI, inside doInBackground() - write web call logic, inside onPostExecute() - show alert dialog which you want to display.

Upvotes: 1

hrnt
hrnt

Reputation: 10142

You can't use application context to create dialogs. Use an Activity context instead.

Also, that way of creating dialogs is bound to create problems later on, especially if the activity is restarted for whatever reason. You should either use Dialog fragments, or managed dialogs (Activity's showDialog() method)

Upvotes: 3

Related Questions