2016-05-31 4 views
-3

Я не могу декодировать отчет logcat. Я изучаю Android и пытаюсь реализовать намерение, тосты и пользовательские тосты в одном приложении.Применение принудительно остановлено. Зачем?

Насколько я знаю, я сделал это правильно. Я прикрепляю трассировку logcat.

FATAL EXCEPTION: main 
Process: com.bt4u.customtoast, PID: 24490 
Theme: themes:{default=overlay:com.rr.neptune, iconPack:system, fontPkg:com.rr.neptune, com.android.systemui=overlay:com.rr.neptune, com.android.systemui.navbar=overlay:com.rr.neptune} 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bt4u.customtoast/com.bt4u.customtoast.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520) 
at android.app.ActivityThread.access$900(ActivityThread.java:153) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5466) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 
at com.bt4u.customtoast.MainActivity.onCreate(MainActivity.java:21) 
at android.app.Activity.performCreate(Activity.java:6251) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)  
at android.app.ActivityThread.access$900(ActivityThread.java:153)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)  
at android.os.Handler.dispatchMessage(Handler.java:102)  
at android.os.Looper.loop(Looper.java:148)  
at android.app.ActivityThread.main(ActivityThread.java:5466)  
at java.lang.reflect.Method.invoke(Native Method)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Основная деятельность

b1 = (Button)findViewById(R.id.button1); 
    b2 = (Button)findViewById(R.id.button2); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    b1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast toast = Toast.makeText(MainActivity.this,"Just clicked",Toast.LENGTH_SHORT); 
      toast.setGravity(Gravity.BOTTOM|Gravity.RIGHT,0,0); 
     } 
    }); 

    b2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(MainActivity.this,second.class); 
      startActivity(i); 
     } 
    }); 
    } 

Также скажите мне, как найти эту проблему с помощью журнала трассировки

+1

Соответствующая часть 'Вызванный: java.lang.NullPointerException: попытка вызвать виртуальный метод void android.widget.Button.setOnClickListener (android.view.View $ OnClickLi stener) 'на ссылке нулевого объекта в com.bt4u.customtoast.MainActivity.onCreate (MainActivity.java:21) ', что означает, что в вашем классе' MainActivity' вы пытаетесь установить 'onClickListener' на кнопку, которая is null – NSimon

+0

Но я проверил, что это не так. – Swarnveer

+1

Опубликуйте соответствующий код от вашего MainActivity – jayeshsolanki93

ответ

6

Вам нужно поменять порядок вы устанавливаете ваши кнопки:

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
b1 = (Button)findViewById(R.id.button1); 
b2 = (Button)findViewById(R.id.button2); 

Это очень важно, так как вам сначала нужно позвонить setContentView, потому что это v iew затем используется для вызова view.findViewById. Если вы попытаетесь сделать это перед настройкой представления, вы не сможете получить ни один из элементов представления.

EDIT: Что касается вашего второго вопроса, то замените:

Toast toast = Toast.makeText(MainActivity.this,"Just clicked",Toast.LENGTH_SHORT); 
     toast.setGravity(Gravity.BOTTOM|Gravity.RIGHT,0,0); 

с:

Toast.makeText(MainActivity.this,"Just clicked",Toast.LENGTH_SHORT).setGravity(Gravity.BOTTOM|Gravity.RIGHT,0,0).show(); 
+1

Да, понял. Я забыл об этом. Thanks – Swarnveer

+0

Есть ошибки в Toast part of main? Так как я получаю сообщение с тостом во время запуска этого приложения – Swarnveer

+0

См. Мое редактирование для тоста. – NSimon

0

Вы вызова метода setContentView неподходящее место

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    b1 = (Button)findViewById(R.id.button1); 
     b2 = (Button)findViewById(R.id.button2); 



     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast toast = Toast.makeText(MainActivity.this,"Just clicked",Toast.LENGTH_SHORT); 
       toast.setGravity(Gravity.BOTTOM|Gravity.RIGHT,0,0); 
      } 
     }); 

     b2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(MainActivity.this,second.class); 
       startActivity(i); 
      } 
     }); 
+0

Есть ли ошибка в Toast part of main? Так как я запускаю это сообщение при запуске этого приложения. – Swarnveer

+0

попробуйте это по одному .... вы комментируете и раскомментируете тост-сообщение ..... @Override protected void onCreate (Bundle savedInstanceState) { // Toast.makeText (это, "onCreate =", Toast.LENGTH_LONG) .показать(); super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); Toast.makeText (это, "onCreate =", Toast.LENGTH_LONG) .show(); } –

Смежные вопросы