關(guān)于“ 源碼有具體代碼,class文件拋出RuntimeException
”
的推薦:
-
RuntimeException:首選項(xiàng)尚未初始化
所以。。如何初始化lateinit var mPref?
您可以將其設(shè)置為某個(gè)有效值,通常盡可能早。在Android上,這通常意味著在
onCreate
或onCreateView
中這樣做。但至少在任何東西試圖進(jìn)入它之前。您可以在onCreateView
中執(zhí)行此操作:override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { mPref = // get preferences in your prefered way binding = F04PrefBinding.inflate(inflater, container, false) return binding.root }
它在下一行(我在帖子中的代碼上標(biāo)記了這個(gè)錯(cuò)誤):“l(fā)ateinit屬性mPref尚未初始化”,但是在下一行!我該怎么做?
您正試圖在聲明未初始化的
lateinit
變量后立即使用它:private lateinit var mPref: SharedPreferences // Declared but not initialized val preferencesEditor: SharedPreferences.Editor = mPref.edit() // Immediately attemps to use mPref which is not initialized (during constructor call)
您不需要像那樣立即初始化編輯器。
您可以將其設(shè)置為屬性,使其僅在訪問時(shí)嘗試訪問mPref,而不在構(gòu)造函數(shù)調(diào)用期間嘗試訪問mPref,這假定在您嘗試訪問編輯器時(shí)它是有效的:
val preferencesEditor: SharedPreferences.Editor get() = mPref.edit()
或者,您可以將編輯器本身設(shè)置為
lateinit
屬性,然后對其進(jìn)行初始化:lateinit var preferencesEditor: SharedPreferences.Editor override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { mPref = // get preferences in your prefered way preferencesEditor = mPref.edit() binding = F04PrefBinding.inflate(inflater, container, false) return binding.root }
請查看文檔了解lateinit和kotlin構(gòu)造函數(shù)是如何工作的。
這里已經(jīng)是底線啦~