在Kotlin中初始化SharedPreference的正确方法

时间:2019-02-05 20:45:03

标签: android kotlin sharedpreferences

我对科特林很陌生。以前,我曾经在这样的活动中声明SharedPreference:

class MainActivity extends AppCompatActivity {
    SharedPreferences main;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        main = getSharedPreferences("main", MODE_PRIVATE);
    }
}

这使我可以在整个课程中使用main实例。我想实现类似的功能。我目前正在这样使用lateinit var


class MainActivityKotlin : AppCompatActivity() {
    lateinit var main : SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        main = getSharedPreferences("main", Context.MODE_PRIVATE)
    }
}

但是我不确定这是否是正确的方法。 这也是var。据我了解,通常建议在实例不变的情况下建议使用val(就像在这种情况下,main一旦初始化就不会改变)。那么这种方法正确吗?

2 个答案:

答案 0 :(得分:2)

使用lateinit很好。毕竟,它就是在那里。

不过,您可以使用一种更清洁的解决方案:lazy-init:

val main by lazy { getSharedPreferences("main", Context.MODE_PRIVATE) }

仅在第一次引用getSharedPreferences()时调用main,然后存储该实例。这与Java中的操作方式类似,但是您无需拆分行。

答案 1 :(得分:1)

实际上,val更好。您可以通过延迟初始化来获得一个:

class MainActivityKotlin : AppCompatActivity() {
    private val sharedPrefs by lazy { getSharedPreferences("main", Context.MODE_PRIVATE) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        /* initialisation is removed from here, as it is now lazy */
    }

    fun otherFunction() {
        // the first use of the shared preference will trigger its initialisation
        val prefInt = sharedPrefs.getInt("key", 0)
    }
}