E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.kte.uniformscan, PID: 9198
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kte.uniformscan/com.dawn.java.ui.homePage.HomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.dawn.java.ui.widget.TopToolbar.setMainTitle(java.lang.String)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3823)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3963)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2484)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:573)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1058)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.dawn.java.ui.widget.TopToolbar.setMainTitle(java.lang.String)' on a null object reference
at com.dawn.java.ui.homePage.HomeActivity.initView(HomeActivity.java:249)
at com.dawn.java.ui.homePage.HomeActivity.onCreate(HomeActivity.java:200)
at android.app.Activity.performCreate(Activity.java:8595)
at android.app.Activity.performCreate(Activity.java:8573)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1456)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3805)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3963)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2484)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.app.ActivityThread.main(ActivityThread.java:8225)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:573)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1058)
这个崩溃的核心错误是:
NullPointerException
Attempt to invoke virtual method 'void com.dawn.java.ui.widget.TopToolbar.setMainTitle(java.lang.String)' on a null object reference
出现在:
at com.dawn.java.ui.homePage.HomeActivity.initView(HomeActivity.java:249)
你在 HomeActivity
的 initView()
方法中,调用了:
topToolbar.setMainTitle("xxx")
但 topToolbar
是 null
,也就是没有成功通过 findViewById()
拿到视图。
组件检查你在 HomeActivity
中调用的 setContentView(R.layout.XXX)
对应的布局文件,比如 activity_home.xml
,确认里面包含了这个组件:
findViewById
在 HomeActivity
中你应该有类似代码:
TopToolbar topToolbar = findViewById(R.id.top_toolbar);
topToolbar.setMainTitle("首页");
如果你忘了
findViewById
,或者 ID 写错了,topToolbar
就是null
。
include
,确保 ID 正确传播如果你用了:
则你不能直接用 R.id.top_toolbar
,因为 include
不会带上 android:id
,你需要在 include
上显式指定 ID:
这样 findViewById(R.id.top_toolbar)
才能找到它。
TopToolbar topToolbar = findViewById(R.id.top_toolbar);
if (topToolbar != null) {
topToolbar.setMainTitle("首页");
} else {
Log.e("HomeActivity", "topToolbar is null, please check layout");
}
为了避免再崩溃,你可以加个保护:
if (topToolbar == null) {
throw new IllegalStateException("TopToolbar is null. Did you forget to set the correct layout or id?");
}
问题 | 原因 | 解决方法 |
---|---|---|
NullPointerException 调用 topToolbar.setMainTitle(...) |
布局中找不到对应 ID | 确保布局里组件存在并 ID 正确 |
使用 没指定 android:id |
findViewById 拿不到 |
给 include 添加 android:id |