#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, ваша проблема, вероятно, в том, как вы это называете. Добавьте это к вопросу.