У меня есть класс данных, который выглядит так:
data class MyData (val myNumber : String,
var myDate : Date?) : Serializable
Когда я устанавливаю дату, я использую форматировщик, как показано ниже:
val cal = Calendar.getInstance()
cal.timeZone = TimeZone.getTimeZone("America/New_York")
cal.set(year.toInt(), monthNumber, day.toInt())
myDate = cal.time
Я сохраняю массив этого в SharedPreferences и загружаю его обратно следующим образом:
private fun GetMyDataArray(): ArrayList<MyData>? {
val json = sharedPrefs!!.getString(STORED_DATA_KEY, "")
val caseType = object : TypeToken<ArrayList<MyData>>() {}.type
return Gson().fromJson<ArrayList<MyData>>(json, caseType)
}
В 99% случаев это работает нормально, но на некоторых пользовательских устройствах происходит сбой:
java.lang.NumberFormatException Invalid number: Mar
Failed to parse date ["Mar 21, 2018 08:01:23']: Invalid number: Mar
com.google.gson.internal.bind.util.ISO8601Utils.parse
Почему на некоторых устройствах это работает нормально, а на других - нет?
Может быть, это из-за настроек локали пользователя? и если да, то как мне это исправить? (большинство моих пользователей находятся в США, но некоторые находятся в Индии и Европе)
Любые указатели приветствуются, спасибо!
Спасибо! Я смог это исправить :)
похоже, у вашей даты неправильный формат. См. stackoverflow.com/questions/6873020/gson-date-format о настройке конкретного формата для использования Gson (это java, но идея та же)