Android 为什么我的应用程序调用时崩溃;setupActionBarWithNavController(navController、appBarConfiguration)";
我在Android Studio的LogCat窗口中收到一条错误消息Android 为什么我的应用程序调用时崩溃;setupActionBarWithNavController(navController、appBarConfiguration)";,android,kotlin,nullpointerexception,android-actionbar,android-architecture-navigation,Android,Kotlin,Nullpointerexception,Android Actionbar,Android Architecture Navigation,我在Android Studio的LogCat窗口中收到一条错误消息 Process: com.riverstonetech.gositeuk, PID: 27370 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.riverstonetech.gositeuk/com.riverstonetech.gositeuk.CountriesActivity}: java.lang.NullPoint
Process: com.riverstonetech.gositeuk, PID: 27370
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.riverstonetech.gositeuk/com.riverstonetech.gositeuk.CountriesActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference
at androidx.navigation.ui.ActionBarOnDestinationChangedListener.setTitle(ActionBarOnDestinationChangedListener.java:48)
at androidx.navigation.ui.AbstractAppBarOnDestinationChangedListener.onDestinationChanged(AbstractAppBarOnDestinationChangedListener.java:100)
at androidx.navigation.NavController.addOnDestinationChangedListener(NavController.java:218)
at androidx.navigation.ui.NavigationUI.setupActionBarWithNavController(NavigationUI.java:220)
at androidx.navigation.ui.ActivityKt.setupActionBarWithNavController(Activity.kt:74)
at com.riverstonetech.gositeuk.CountriesActivity.onCreate(CountriesActivity.kt:31)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at 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)
听起来您的活动有一个主题集,它包含
.NoActionBar
使用操作栏的一个更安全的解决方案是使用工具栏作为布局的一部分,然后使用
setupWithNavController(工具栏、NavController、NavController、AppBarConfiguration配置)
如果您确实想使用操作栏,那么您的活动需要一个提供操作栏的主题。检查您的AndroidManifest.xml和styles.xml 我遇到了同样的问题,解决了这个问题。我希望这有帮助。
问题是我没有为片段库添加依赖项
在应用程序级别build.gradle上添加片段依赖项。
实现“androidx.fragment:fragment:1.2.4”
实现“androidx.fragment:fragment ktx:1.2.4”
清理生成(生成->清理项目)
使缓存无效并重新启动(如果开发人员PC操作系统是Windows)
重新启动电脑(我不知道为什么。但是如果我不重新启动电脑,问题会再次出现。)
重新启动后,再次构建并运行应用程序
如果您不想使用操作栏。删除下面的代码
setupActionBarWithNavController(navController, appBarConfiguration)
或者将NoActionBar更改为DarkActionBar或任何其他。方法setupActionBarWithNavController()
假定您有一个操作栏
在您的代码中,您没有调用setSupportActionBar()
,如果您使用的是.NoActionBar
主题,您就没有ActionBar
只需在布局中使用工具栏
,然后使用:
override fun onCreate(savedInstanceState: Bundle?) {
//..
setContentView(R.layout.activity_countries)
val toolbar = findViewById<Toolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
//...
setupActionBarWithNavController(navController, appBarConfiguration)
//..
}
override-fun-onCreate(savedInstanceState:Bundle?){
//..
setContentView(R.layout.activity_国家/地区)
val toolbar=findViewById(R.id.toolbar)
设置支持操作栏(工具栏)
//...
setupActionBarWithNavController(navController、appBarConfiguration)
//..
}
ANDROID JAVA
选项1:
更改清单上的活动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>
享受您是否检查了logcat中的异常堆栈跟踪?我应该在异常堆栈跟踪中查找什么?主要是崩溃的原因。如果您不能真正解析它,那么应该将它附加到问题中,以便我们可以看到它。在本例中,崩溃似乎是导航助手调用的内部问题,因此我肯定很想知道它们实际上在哪里调用actionBar.setTitle
。异常堆栈跟踪addedI我不知道。你能告诉我一个在线资源,在那里我可以了解动作栏和主题吗?官方文档已经过时了(参考Holo和其他东西),请查看这篇文章:谢谢,但我想我需要更多关于Android导航的基本信息,因为我只是在学习Android应用程序构建。啊,Jetpack导航是相当新的(这就是你似乎正在使用的),所以你可能想看看,因为我个人不使用它(我使用底层机制,因为我不需要图形编辑器)。不过,我希望文档能很好地描述它。
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);