2013-05-27 2 views
0

Я не могу создать диалоговое окно внутри AsyncTask. Может кто-нибудь помочь здесь? Я получаю сообщение об ошибке "android.view.WindowManager $ BadTokenException: Невозможно добавить окно - токен null не для приложения".Не удается создать диалоговое окно внутри AsyncTask

Вот мой код:

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(); 
        } 
      } 
    } 
+1

Вы можете сделать работу пользовательского интерфейса в '' onPreExecute' и onPostExecute' –

+0

Я нашел этот вопрос здесь AReader .. Проблема с getApplicationContext(). Вместо этого я использовал «ма». И уже определена глобальная MainActivity ma; и назначил его «this» внутри onCreate(). Это сработало ! –

ответ

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(); 
        } 
+0

Спасибо Mohit .. Да .. это была проблема .. –

+0

Ваш приветственный Ravi –

+0

его рабочие благодарности –

1

использование вместо

   final AlertDialog.Builder alertBox = new AlertDialog.Builder(
         YourActivity.this, 
           android.R.style.Theme_Dialog); 
+0

Спасибо Stine .. Я получил его –

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(); 
        } 
      } 
    }` 
Смежные вопросы