Android 为什么我的LocalDate.parse不能使用从gson插入的值?
我有一门课:Android 为什么我的LocalDate.parse不能使用从gson插入的值?,android,kotlin,gson,localdate,Android,Kotlin,Gson,Localdate,我有一门课: data class Day(val date: String, val events: List<Event>){ val localDateTimeDate: LocalDate by lazy { LocalDate.parse(date) } } 如果有一天我尝试读取。localDateTimeDate,我会得到一个nullpointer异常: 2019-08-13 00:06:13.075 21870-21942/nl.joo
data class Day(val date: String, val events: List<Event>){
val localDateTimeDate: LocalDate by lazy {
LocalDate.parse(date)
}
}
如果有一天我尝试读取。localDateTimeDate
,我会得到一个nullpointer异常:
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()' on a null object reference
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.data.Day.getLocalDateTimeDate(Unknown Source:25)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.ui.PdfParserActivity$onCreate$$inlined$let$lambda$1.invoke(PdfParserActivity.kt:140)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.ui.PdfParserActivity$onCreate$$inlined$let$lambda$1.invoke(PdfParserActivity.kt:28)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt:143)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Unknown Source:0)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$sam$java_util_concurrent_Callable$0.call(Unknown Source:2)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.lang.Thread.run(Thread.java:764)
如果一个类没有无参数构造函数,Gson会在不调用构造函数的情况下创建一个对象,因此存储
lazy
delegate的字段不会初始化,并且在访问委托给它的属性时会得到一个NullPointerException
有关可能的解决方案,请参见此问题:谢谢!这会让我重新开始:)我用
val-gsonDaysList=(Gson().fromJson(jsonData,listType))
替换为val-gsonDaysList=(Gson().fromJson(jsonData,listType))
val-daysList=gsonDaysList.map{Day(it.date,it.events)}
,但是基本上把gson转储到一个类中,然后我用它来填充另一个类。也许不是最优雅的方式,但它很有效。
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object kotlin.Lazy.getValue()' on a null object reference
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.data.Day.getLocalDateTimeDate(Unknown Source:25)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.ui.PdfParserActivity$onCreate$$inlined$let$lambda$1.invoke(PdfParserActivity.kt:140)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at nl.joozd.joozdter.ui.PdfParserActivity$onCreate$$inlined$let$lambda$1.invoke(PdfParserActivity.kt:28)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Async.kt:143)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$doAsync$1.invoke(Unknown Source:0)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at org.jetbrains.anko.AsyncKt$sam$java_util_concurrent_Callable$0.call(Unknown Source:2)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2019-08-13 00:06:13.075 21870-21942/nl.joozd.joozdter W/System.err: at java.lang.Thread.run(Thread.java:764)