无法调用类的无参数构造函数。向 Gson 注册此类型的 InstanceCreator 可能会解决此问题

use*_*924 6 android gson android-gradle-plugin android-r8

java.lang.RuntimeException: Unable to invoke no-args constructor for class com.arch.example.network.models.NetworkPagingList. Registering an InstanceCreator with Gson for this type may fix this problem.\n                    at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:228)\n                    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\n                    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)\n                    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)\n                    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)\n                    at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)\n                    at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)\n                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)\n                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)\n                    at java.lang.Thread.run(Thread.java:1012)\n                 Caused by: java.lang.UnsupportedOperationException: Abstract class can't be instantiated! Class name: com.arch.example.network.models.NetworkPagingList\n                    at com.google.gson.internal.UnsafeAllocator.assertInstantiable(UnsafeAllocator.java:120)\n                    at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:49)\n                    at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:225)\n                    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\xc2\xa0\n                    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)\xc2\xa0\n                    at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)\xc2\xa0\n                    at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)\xc2\xa0\n                    at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)\xc2\xa0\n                    at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)\xc2\xa0\n                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)\xc2\xa0\n                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)\xc2\xa0\n                    at java.lang.Thread.run(Thread.java:1012)\xc2\xa0\n
Run Code Online (Sandbox Code Playgroud)\n

实体:

\n
import com.google.gson.annotations.SerializedName\n\ndata class NetworkPagingList<T>(\n    @SerializedName("data")\n    val data: List<T>\n)\n
Run Code Online (Sandbox Code Playgroud)\n

使用地点:

\n
    @GET("worker/shifts")\n    suspend fun getShifts(\n        @Query("page") page: Int,\n        @Query("perPage") perPage: Int\n    ): NetworkPagingList<NetworkShift>\n
Run Code Online (Sandbox Code Playgroud)\n

那么这里到底出了什么问题呢?

\n

以前工作正常,但似乎最新的 Android gradle 插件停止与发布版本一起工作,R8 的一些 mb

\n

Soh*_*med 5

尝试添加@Keep您的数据类,如下所示:

import com.google.gson.annotations.SerializedName

@Keep
data class NetworkPagingList<T>(
    @SerializedName("data")
    val data: List<T>
)
Run Code Online (Sandbox Code Playgroud)