Поскольку вы переопределяете неправильный метод в BaseActivity
, поэтому ваше приложение вылетает.
Решение: Измените код на
abstract class BaseActivity : AppCompatActivity() {
lateinit var applicationController: ApplicationController
// [IMPORTANT] Remove or comment-out this method
// override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
// super.onCreate(savedInstanceState, persistentState)
// applicationController = ApplicationController.getInstance(applicationContext)
// }
// Override this method
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
applicationController = ApplicationController.getInstance(applicationContext)
}
}
Объяснение: В этом разделе объясняется, почему код не работает.
kotlin.UninitializedPropertyAccessException
Это подкласс приложения RuntimeException, приложениявыдает это исключение, когда вы обращаетесь к объекту, вызывая свойства или методы самостоятельно перед инициализацией.
Когда создается действие LoginScreen
, Android вызывает его метод onCreate
.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login_screen)
emailMatcher = applicationController.getEmailMatcher()
passwordMatcher = applicationController.getPasswordMatcher()
}
В первой строке super.onCreate(savedInstanceState)
будет вызываться onCreate
метод его родителя, в этом случае будет вызываться onCreate (bundle)
в BaseActivity
деятельности.
К сожалению, в операции BaseActivity
вы переопределяете и помещаете исходный код для applicationController
в другой метод onCreate(bundle, persistentState)
, который очень похож на onCreate (bundle)
.Разница между ними заключается в количестве параметров.В результате на данный момент applicationController
все еще не инициализирован.
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
super.onCreate(savedInstanceState, persistentState)
applicationController = ApplicationController.getInstance(applicationContext)
}
Пока приложение не достигнет этой строки
emailMatcher = applicationController.getEmailMatcher()
Поскольку вы вызываете метод getEmailMatcher
для неинициализированного объектаapplicationController
, поэтому приложение выдает kotlin.UninitializedPropertyAccessException
и приводит к сбою приложения.