KotlinNullPointerException при повороте экрана на фрагменте с картой и локализацией - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть kotlin.KotlinNullPointerException в строке:

val locationmanager=context!!.getSystemService(Context.LOCATION_SERVICE) as LocationManager

Когда я поворачиваю экран. Эта строка в функции:

class MyMapFragment: Fragment(),OnMapReadyCallback

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Действие уничтожается и воссоздается при повороте телефона. Это означает, что во время повторного создания действия контекст будет нулевым, и вы должны пытаться получить к нему доступ в какой-то момент во время этого.

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

var locationmanager: LocationManager? = null   

override fun onActivityCreated(savedInstanceState: Bundle?) {
    val context = context ?: return // this line gets a non-null context and is safer than !!

    locationmanager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager

    ...

В общем, при доступе к объектам, которые могут быть обнулены в Kotlin, гораздо предпочтительнее использовать ? вместо !!, чтобы избежать любых исключений нулевого указателя

1 голос
/ 19 февраля 2020

Фрагмент может получить доступ к контексту только после вызова onAttach метода жизненного цикла, поскольку он привязан к активности своего хоста в этом методе жизненного цикла. Итак, чтобы избежать NPE, вам нужно во фрагменте

lateinit var locationmanager: LocationManager

override fun onCreateView(inflater: LayoutInflater,
                          container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    locationmanager = context!!.getSystemService(Context.LOCATION_SERVICE) as LocationManager
    return inflater.inflate(R.layout.your_fragment_layout, container, false)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...