Правильный способ инициализации SharedPreference в Kotlin - PullRequest
0 голосов
/ 05 февраля 2019

Я очень новичок в Котлине.Ранее я использовал объявление 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 голосов
/ 05 февраля 2019

Действительно, 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)
    }
}
0 голосов
/ 05 февраля 2019

Использование lateinit прекрасно.В конце концов, он существует для этой цели.

Существует несколько более чистое решение, которое вы можете использовать, однако: lazy-init:

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

Это вызывает только getSharedPreferences(), когда mainсначала ссылается, а затем сохраняет этот экземпляр.Это похоже на то, как все делается в Java, но вам не нужно разбивать строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...