2015-10-22 3 views
0

У меня есть проект с некоторыми классами.Applicaton остановил ошибку после создания экземпляра AlertDialog

В одном классе, который расширяет активность, есть кнопка. Это метод onCreate класса.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.select_car); 
/////// some codes and behaviors here 

До тех пор, пока я не приду к одному из моих методов, который действует на кнопку.
Когда кнопка нажата, некоторые данные вставляются в мою БД, , но перед этим я хочу получить подтверждение от конечного пользователя, что то, что он выбрал, исправлено или нет.
Для первого я хочу задать только положительный ответ, вот что я сделал в этой конкретной Button.

  choose.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
//i want to get Confirm from end user, so i did this 
       final AlertDialog.Builder builder = new AlertDialog.Builder(getApplication()); 
       builder.setMessage("Are You Sure To do this?") 
         .setTitle("Alert"); 
       builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
        } 
       }); 
AlertDialog dialog = builder.create(); 

// some data Insert into my DB 
    } 
      }); 

Когда я запускаю свой проект и достичь этого класса, я получил эту ошибку в Android устройства:

К сожалению, «MyApplicationName» остановился.

И этот журнал от андроида-студии

10-22 18:36:17.910 14478-14478/com.theonlyone.behtakapp E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.theonlyone.behtakapp, PID: 14478 
    android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
      at android.view.ViewRootImpl.setView(ViewRootImpl.java:660) 
      at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:261) 
      at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
      at android.app.Dialog.show(Dialog.java:286) 
      at android.app.AlertDialog$Builder.show(AlertDialog.java:951) 
      at com.theonlyone.behtakapp.Car$5.onClick(Car.java:306) 
      at android.view.View.performClick(View.java:4470) 
      at android.view.View$PerformClick.run(View.java:18796) 
      at android.os.Handler.handleCallback(Handler.java:808) 
      at android.os.Handler.dispatchMessage(Handler.java:103) 
      at android.os.Looper.loop(Looper.java:193) 
      at android.app.ActivityThread.main(ActivityThread.java:5299) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:641) 
      at dalvik.system.NativeStart.main(Native Method) 

Что я должен делать?

+0

'dialog.show()'? –

+0

Я сомневаюсь, что такое 'getApplication()'? Возможно, вам придется изменить его с помощью 'getApplicationContext()' или нужно передать контекст активности. И еще одна вещь добавила код ввода db в кнопку onClick диалога, – user370305

+0

Да, я показываю диалог, я забыл добавить это в свой код. Что мне делать? Я редактирую свой код.Thx. Еще проблема существует –

ответ

0

$ BadTokenException: Невозможно добавить окно - маркер нуль не для применения

Поскольку проходя контекст приложения с использованием getApplication() в AlertDialog.Builder.

Чтобы показать предупреждение от текущей деятельности, которая выполняется проход Car.this или v.getContext()AlertDialog.Builder в

0

Это должно быть, как это

choose.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
//i want to get Confirm from end user, so i did this 
        final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); 
        builder.setMessage("Are You Sure To do this?") 
          .setTitle("Alert"); 
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // some data Insert into my DB 
         } 
        }); 
        builder.show(); 
       } 
     }); 
Смежные вопросы