kotlin.TypeCastException: null не может быть применено к ненулевому типу android.support.v7.widget.Toolbar

Я новичок в Android здесь. Какая может быть ситуация для моей проблемы? Я пытаюсь представить свой фрагмент в MainActivity . Любые предложения помогут. благодаря

Основной класс деятельности …

 class NavigationActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.fragment_schedule) val toolbar = findViewById(R.id.toolbar) as Toolbar setSupportActionBar(toolbar) // setup toolbar toolbar.setNavigationIcon(R.drawable.ic_map) val drawer = findViewById(R.id.drawer_layout) as DrawerLayout val toggle = ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) drawer.addDrawerListener(toggle) // navigation drawer toggle.syncState() val navigationView = findViewById(R.id.nav_view) as NavigationView navigationView.setNavigationItemSelectedListener(this) //setup navigation view } 

Мой класс фрагментов.

  class fragment_schedule : Fragment() { override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment return inflater!!.inflate(R.layout.fragment_schedule, container, false) } 

В вашем макете, по-видимому, нет компонента панели инструментов с id R.id.toolbar , поэтому findViewById(...) возвращает значение null которое нельзя отнести к Toolbar .

Нулевая безопасность важна для строительства в Kotlin . Это помогает вам выявить большинство NPE на ранних этапах развития. Подробнее о нулевой безопасности на официальном сайте Kotlin .

Если наличие компонента панели инструментов существенно, тогда никогда не val toolbar значение переменной val toolbar .

В этом случае ваш текущий код правильный, не меняйте его. Вместо этого исправьте ошибку макета / неправильной панели инструментов.

var toolbar: Toolbar? = null var toolbar: Toolbar? = null определяет переменную типа Toolbar типа Toolbar и никакое исключение не будет повышаться, если в вашем макете активности не будет компонента панели инструментов, но если вы действительно хотите получить этот компонент, вы получите другие исключения позже или даже непредсказуемое поведение вашей программы, удивит вас или пользователей приложений .

С другой стороны, вы должны делать проверки с нулевой безопасностью при использовании переменных с нулевым значением

В этом случае ваш код должен быть слегка изменен. Важная часть:

 val toolbar = findViewById(R.id.toolbar) as Toolbar? 

? означает, что если findViewById возвращает null , то этот null будет назначен для val toolbar вместо повышения kotlin.TypeCastException: null cannot be cast to non-null type android.support.v7.widget.Toolbar exception

Пример полного кода:

  val toolbar = findViewById(R.id.toolbar) as Toolbar? // toolbar now is nullable if(toolbar != null) { // kotlin smart cast of toolbar as not nullable value setSupportActionBar(toolbar) // setup toolbar toolbar.setNavigationIcon(R.drawable.ic_map) val drawer = findViewById(R.id.drawer_layout) as DrawerLayout val toggle = ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) drawer.addDrawerListener(toggle) // navigation drawer toggle.syncState() } 
Intereting Posts
kotlin RecyclerViewAdapter IndexOutOfBoundException Заменяйте внешне вызываемые обратные вызовы с помощью RxJava Как использовать Kotlin в проектах AppEngine с использованием Gradle Конфликтные свойства Котлина Как создать диаграммы и UML кода Котлина? FragmentTransaction не будет компилироваться в проекте Android Kotlin Почему intairiJ IDEA-область видимости «предоставляется» вместо «компиляции»? Типы подстановок Java против звездной проекции Котлина андроидные запросы с несколькими областями с помощью RXJava Наличие getter возвращает тип с нулевым значением, даже если поле поддержки является нулевым Что представляет собой сжатый способ глубокого копирования 2D MutableList? Как разделить строку с набором разделителей и найти, что это за разделитель? Котлин Почему мы не можем публиковать типы типов из частных расширенных типов? Алгоритм для рекомендаций по выравниванию / привязки, найденных в GUI-сборщиках Отладка встроенных функций Kotlin