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 } } 

发现对象在Kotlin中被延迟加载需要一段时间

这不是懒加载的意思。 这意味着如果对象不在代码中使用,它们将不会被分类。 如果userId仅与Kotlin代码交互,则不可能为null。

我认为你不能从BaseData对象的init块访问共享首选项。

我已经用代码解决了问题。 我无法调试也没有得到错误,只是一个普通的黑屏,所以我假设对象是懒加载的,但实际上不是。 此外在对象的init函数正在发生,

但崩溃发生在从json的SharePreferences检索回到Kotlin对象,但没有错误抛出和模拟器上的黑屏是混乱。 在Android Studio中可能更好的调试支持可能有助于这里和所需的改进范围。

所以我随意通过评估expression式,发现问题是在getPref方法,最后加入而不是帮助,还没有研究什么是通用的意思,将很快做到这一点。

但是,在完成代码的这些更改之后,将问题解决为已解决,如下所示:

 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") != null) Preferences.getPref("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  getPref(key:String) : T?{ val gson = Gson() val jsonString = pref!!.getString(key,"") if(jsonString != "") { val type = object : TypeToken() {}.type return gson.fromJson(jsonString, type) } else return null }