Reputation: 11768
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
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
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
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