我在Android Studio的LogCat窗口中收到一条错误消息;
进程:com.riverstonetech.gositeuk,PID:27370 java.lang.RuntimeException:无法启动活动ComponentInfo {com.riverstonetech.gositeuk / com.riverstonetech.gositeuk.CountriesActivity}:java.lang.NullPointerException:尝试调用虚拟方法'void androidx.appcompat.app.ActionBar.setTitle( java.lang.CharSequence)'上的空对象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6119) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' 在androidx.navigation.ui.ActionBarOnDestinationChangedListener.setTitle(ActionBarOnDestinationChangedListener.java:48) 在androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:100) 在androidx.navigation.NavController.addOnDestinationChangedListener(NavController.java:218) 在androidx.navigation.ui.NavigationUI.setupActionBarWithNavController(NavigationUI.java:220) 在androidx.navigation.ui.ActivityKt.setupActionBarWithNavController(Activity.kt:74) 在com.riverstonetech.gositeuk.CountriesActivity.onCreate(CountriesActivity.kt:31) 在android.app.Activity.performCreate(Activity.java:6679) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 在android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1477) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:154) 在android.app.ActivityThread.main(ActivityThread.java:6119) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
当我运行包含以下代码的应用程序时:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_countries)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.englandFragment, R.id.scotlandFragment, R.id.walesFragment, R.id.nirelandFragment
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
应用到达行时崩溃;
setupActionBarWithNavController(navController, appBarConfiguration)
答案 0 :(得分:2)
我遇到了同样的问题并解决了问题。我希望这有帮助。 问题是我没有为片段库添加依赖项。
在应用程序级别build.gradle上添加片段依赖性。 实现'androidx.fragment:fragment:1.2.4' 实现'androidx.fragment:fragment-ktx:1.2.4'
清理构建(Build-> Clean Project)
使缓存无效并重新启动(如果开发人员PC操作系统是Windows)
重新启动PC(我不知道为什么。但是,如果我不重新启动PC,则会再次出现此问题。)
重新启动后,再次构建并运行该应用程序。
答案 1 :(得分:2)
如果您不想使用操作栏。删除以下代码
setupActionBarWithNavController(navController, appBarConfiguration)
或将NoActionBar更改为DarkActionBar或其他任何名称。
答案 2 :(得分:1)
方法setupActionBarWithNavController()
假设您有一个ActionBar
。
在您的代码中,您没有调用setSupportActionBar()
,并且如果您使用的是.NoActionBar
主题,那么您将没有ActionBar
。
只需在布局中使用Toolbar
并使用:
override fun onCreate(savedInstanceState: Bundle?) {
//..
setContentView(R.layout.activity_countries)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
//...
setupActionBarWithNavController(navController, appBarConfiguration)
//..
}
答案 3 :(得分:0)
听起来像您为自己的“活动”设置了一个主题,该主题具有.NoActionBar
。
使用操作栏的一种更安全的解决方案是将Toolbar
用作布局的一部分,然后使用
setupWithNavController(Toolbar toolbar, NavController navController, AppBarConfiguration configuration)
如果您确实想使用操作栏,则您的“活动”需要一个提供ActionBar的主题。检查您的AndroidManifest.xml和styles.xml。
答案 4 :(得分:0)
ANDROID JAVA
选项1: 在清单上更改Activity AppTheme或在styles.xml上添加新样式并应用于该活动
选项2: 将操作栏添加到布局文件中,如下所示:
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.android.material.appbar.AppBarLayout>
在setContentView()之后的Activity上添加以下内容:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
享受