Как вызвать getSharedPreferences вне функции onCreate в Котлине?

#android #kotlin

#Android #котлин

Вопрос:

Контекст


В настоящее время я создаю приложение, которое позволяет людям создавать список «Что делать» и проверять завершенный элемент в списке, нажав на этот элемент.

Это функция, которая будет вызвана при нажатии кнопки:

 fun onClickButton(button: Button) {  var sharedPref = getSharedPreferences(packageName   "_preferences", Context.MODE_PRIVATE)  sharedPref.getString("store_list", "NO_LIST")  // ... }  

И это фрагмент полного кода (MainActivity.kt)

 class MainActivity : AppCompatActivity() {  fun onClickButton(button: Button) {  var sharedPref = getSharedPreferences(packageName   "_preferences", Context.MODE_PRIVATE)  val list sharedPref.getString("store_list", "NO_LIST")  // ...  }  // ... }  

Проблема


Когда я нажимаю на один из элементов, приложение завершает работу, и журнал возвращает ошибку:

 java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)' on a null object reference  

Решение, которое я пробовал


Я попытался поместить sharedPref внешнюю функцию и в MainActivity класс как нулевую переменную, а затем объявить переменную внутри onCreate функции, например так:

 class MainActivity : AppCompatActivity() {  var sharedPref: SharedPreferences? = null  fun onClickButton(button: Button) {  var sharedPref = getSharedPreferences(packageName   "_preferences", Context.MODE_PRIVATE)  val list = sharedPref?.getString("store_lock_app", "NO_CONFIG")  if (list != null) {  Log.d("list", list)  }  // ...  }  override fun onCreate(savedInstanceState: Bundle?) {  sharedPref = getSharedPreferences(packageName   "_preferences", Context.MODE_PRIVATE)  // ...  }  // ... }  

И когда я нажимаю на элемент, list вывод возвращает значение null:

 D/list: null  

Вывод


Итак, есть ли какой-либо способ вызвать getSharedPreferences за пределами функции onCreate? (Кроме того, все это происходит в одном и том же действии)

Комментарии:

1. Действие не может вызывать подобный метод в другом действии. Нет ничего плохого в том, чтобы получить SharedPrefs в onClick, ваша проблема, вероятно, в том, как вы это называете. Добавьте это к вопросу.