应用程序强制停止。为什么?

问题描述:

我无法解码logcat报告。我正在学习android并尝试在单个应用中实现intent,toast和自定义toast。应用程序强制停止。为什么?

据我所知,我做得很对。我正在附加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 (MainActivity.java:21)',这意味着在你的类MainActivity中,你试图在Button上设置一个'onClickListener',这个对象在com.bt4u.customtoast.MainActivity.onCreate为空 – NSimon

+0

但我检查这是不正确的。 – Swarnveer

+1

从您的MainActivity发布一些相关的代码 – jayeshsolanki93

你需要反转你设置你的按钮以便找到问题:

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

这非常重要,因为您首先需要拨打setContentView,因为那个v然后使用视图呼叫view.findViewById。如果您在设置视图之前尝试这样做,您将无法获取任何视图的元素。

编辑:关于你提到的第二个问题,替换:

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

是的。我忘了它。谢谢 – Swarnveer

+0

主Toast部分有任何错误吗?因为我在运行这个应用程序时得到烤面包信息 – Swarnveer

+0

请参阅我的烤面包问题编辑 – NSimon

你调用的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部分主程序中是否有任何错误?因为我在运行这个应用程序时得到了敬酒信息。 – Swarnveer

+0

尝试这一个一个....你评论和取消评论吐司消息..... @Override 保护无效onCreate(Bundle savedInstanceState){ // Toast.makeText(this,“onCreate =”,Toast.LENGTH_LONG) 。显示(); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toast.makeText(this,“onCreate =”,Toast.LENGTH_LONG).show(); } –