Задержка загрузки объектов Kotlin

У меня странная проблема, у меня есть начальная активность входа в Android, а onCreateMethod от нее – запускается, где я вызывал класс Object, который является статическим объектом с именем BaseData. Я получаю странную нулевую ошибку, а ее объект. Обнаружено, что объекты загружаются в Kotlin, которые требуют времени, Как заставить его загрузить сначала и быть доступным, когда будет создана моя основная активность входа в систему.

class LoginActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { if(BaseData.userId == “”) { //At this step BaseData itself comes as null, so app goes blank //Do something } } } object BaseData : Observable() { var initialSyncDone:Boolean = false var isOffline:Boolean = true var userId: String = “” init{ // I have logic to load userId from shared preferences } } 

Найдено, что объекты загружаются в Котлин, которые требуют времени

Это не то, что означает ленивая загрузка. Это означает, что объекты не будут загружаться по классам, если они не используются в коде. Невозможно, чтобы userId был пустым, если он взаимодействует только с кодом Котлина.

Я думаю, вы не можете получить доступ к общим предпочтениям из блока init объекта BaseData.

У меня были проблемы с кодом. Я не смог отлаживать и не получать ошибок, просто обычный черный экран, поэтому у меня было предположение, что объекты ленивы загружены, но на самом деле нет. Также функция init в объекте происходила,

Но авария происходила при извлечении SharePreferences из json обратно в объект Kotlin, но ошибка не была выбрана, и черный экран на симуляторе был путаницей. Может быть, лучшая поддержка отладки в Android Studio может помочь здесь и необходимости улучшения.

Поэтому я пошел случайным путем оценки выражений, чтобы определить, что проблема была в методе getPref, и вместо того, чтобы помогать, вместо того, чтобы помогать, еще предстоит изучить, что означает средство reified, сделаем это в ближайшее время.

Но закрытие проблемы было решено после этих изменений в коде следующим образом:

 class LoginActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { BaseData.loadPrefData() if(BaseData.userId == “”) { //Do something } } } object BaseData : Observable() { var initialSyncDone:Boolean = false var isOffline:Boolean = true var userId: String = “” fun loadPrefData // init works but debugging was not happening so no errors before { if(Preferences.pref!!.contains("user")) { userId = if(Preferences.getPref<User>("user") != null) Preferences.getPref<User>("user")!!.id!! else "" } } // Preference class get from SharePreferences // **reified** was the missing one, i didn't had before, so it was // crashing to convert from Preferences back to Kotlin Object, but no debug errors. inline fun <reified T> getPref(key:String) : T?{ val gson = Gson() val jsonString = pref!!.getString(key,"") if(jsonString != "") { val type = object : TypeToken<T>() {}.type return gson.fromJson<T>(jsonString, type) } else return null } 
Intereting Posts