使用Kotlin无法反序列化Gson的JSON(仅适用于Android KitKat,可能更低)

正如标题描述我试图反序列化一些JSON这样做:

val jsonResponse = ApiClientLive().get("events/" + id.toString() + ".json") val event = GsonBuilder().create().fromJson(jsonResponse, Event::class.java) //  course1.name!!.compareTo(course2.name!!, ignoreCase = true) } 

这只会在Android KitKat,Api级别19运行时崩溃,这是崩溃消息:(19是我支持的最低,所以我不知道更低的api水平)

 onError() java.lang.RuntimeException: Unable to invoke no-args constructor for class ...event.models.Event. Registering an InstanceCreator with Gson for this type may fix this problem. at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:226) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) at com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at com.google.gson.Gson.fromJson(Gson.java:774) at ...event.EventPresenter$loadEvent$1.subscribe(EventPresenter.kt:96) at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40) at io.reactivex.Observable.subscribe(Observable.java:10910) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:50) at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) at com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at com.google.gson.Gson.fromJson(Gson.java:774) at ...event.EventPresenter$loadEvent$1.subscribe(EventPresenter.kt:96) at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40) at io.reactivex.Observable.subscribe(Observable.java:10910) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.VerifyError: com/tractrac/otrack/event/models/Event$Creator at ...event.models.Event.(Event.kt) at sun.misc.Unsafe.allocateInstance(Native Method) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:50) at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:223) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:210) at com.google.gson.Gson.fromJson(Gson.java:888) at com.google.gson.Gson.fromJson(Gson.java:853) at com.google.gson.Gson.fromJson(Gson.java:802) at com.google.gson.Gson.fromJson(Gson.java:774) at ...event.EventPresenter$loadEvent$1.subscribe(EventPresenter.kt:96) at io.reactivex.internal.operators.observable.ObservableCreate.subscribeActual(ObservableCreate.java:40) at io.reactivex.Observable.subscribe(Observable.java:10910) at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96) at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:452) at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:61) at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:52) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:152) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:265) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) 

Event对象如下所示:

 @SuppressLint("ParcelCreator") @Parcelize data class Event( var id: Int, var name: String?, @SerializedName("permanent") var isPermanent: Boolean, @SerializedName("start_time") var startTime: Long?, @SerializedName("end_time") var endTime: Long?, @SerializedName("map_publication_time") var mapPublicationTime: Long?, @SerializedName("allow_punching") var allowPunching: Boolean?, var courses: List? ): Parcelable 

课程的所有子对象看起来与此类似。

有谁知道一个很好的小修补程序?

编辑:我发现某处添加空构造函数的对象可能会解决这个问题。 但将其添加到事件和所有自定义子对象会产生另一个错误:

 FATAL EXCEPTION: RxCachedThreadScheduler-1 Process: ...debug, PID: 30493 io.reactivex.exceptions.UndeliverableException: java.lang.VerifyError: ../event/models/Event$Creator 

编辑2:即使我得到这个其他的错误,我仍然在同一行上的崩溃。 所以问题仍然是GSON不能够反序列化JSON。