Intereting Posts
Котлинское отношение реляционного равенства на Int со значениями от -128 до 127 Kotlin: Можем ли мы использовать @Subscribe EventBus (GreenRobot) в Котлине? Как использовать джексон для десериализации в коллекциях Котлина Как найти имя переменной из string-массива в strings.xml Могу ли я сделать конструктор по умолчанию для класса, созданного из файла Kotlin private? «Lateinit» или «by lazy» при определении глобального android.widget var / val android – Модифицировать вызов void с помощью Kotlin Преобразование единиц измерения в километры до миль не возвращает ожидаемый результат Как получить вызывающую функцию функции kotlin Ошибка при импорте классов кода проекта в android studio 3.0 Поток в котлин Явное возвращение из лямбда-выражения в Котлине Почему Котлин держит MetaData в файле класса Kotlin? Как лучше всего найти элемент в вложенных списках? Glide onLoadFailed () триггер после загрузки всего изображения после прокрутки вниз, а затем прокрутки вверх

Как сохранить объект класса данных в общих предпочтениях с помощью Kotlin?

Как сохранить экземпляр класса данных в SharedPreferences с помощью Kotlin . Я пишу этот код, но он не работает, он каждый раз вызывает сбои при извлечении данных. Я должен сделать это, чтобы сохранить бронирование пользователей на местном уровне и получить его каждый раз от предпочтений и поставить эти значения в singleton .

Авария:

 java.lang.IllegalStateException: gson.fromJson(json, BookingResponse::class.java) must not be null. 

BookingResponse – мой класс данных

 fun saveResponse(context: Context,bookingResponse: BookingResponse) { val prefs = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE) val prefsEditor = prefs.edit() val gson = Gson() val json = gson.toJson(bookingResponse) prefsEditor.putString(Constants.BOOKING, json) prefsEditor.commit() } /** * Get bookingResponse from the shared preference * * @return Saved BookingResponse */ fun getResponse(context:Context): BookingResponse { val prefs = context.getSharedPreferences(FILE_NAME, Context.MODE_PRIVATE) val gson = Gson() val json = prefs.getString(Constants.BOOKING, "") return gson.fromJson<BookingResponse>(json, BookingResponse::class.java) } 

Solutions Collecting From Web of "Как сохранить объект класса данных в общих предпочтениях с помощью Kotlin?"

BookingResponse данных BookingResponse содержит свойства, определенные как BookingResponse .

В тот момент, когда вы вызываете prefs.getString(Constants.BOOKING, "") в первый раз, json устанавливается в пустую строку. Когда вы конвертируете эту строку в экземпляр BookingResponse , у вас не будет никаких свойств. Gson создаст этот экземпляр независимо, что приведет к свойствам с нулевым значением. Поскольку это недопустимо, вы получаете это исключение.

Чтобы исправить это, вам необходимо предоставить строку по умолчанию со всеми установленными свойствами или значениями по умолчанию, реализованными в вашем классе данных. Кроме того, вы можете обрабатывать значение по умолчанию getString() отдельно.

 json.takeUnless { it.isEmpty() } ?.let { gson.fromJson(json, BookingResponse::class.java) } ?: createEmptyBookingResponse()