gpt4 book ai didi

kotlin - 无法为 retrofit2.Call 调用无参数构造函数

转载 作者:行者123 更新时间:2023-12-02 12:29:43 25 4
gpt4 key购买 nike

我有以下改造单例:

interface MyAPI
{
@GET("/data.json")
suspend fun fetchData() : Call<MyResponse>

companion object
{
private val BASE_URL = "http://10.0.2.2:8080/"

fun create(): MyAPI
{
val gson = GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
.create()

val retrofit = Retrofit.Builder()
.addConverterFactory( GsonConverterFactory.create( gson ) )
.baseUrl( BASE_URL )
.build()

return retrofit.create( MyAPI::class.java )
}
}
}

MyResponse.kt
data class MyResponse(
val listOfData: List<DataEntity>
)

数据实体.kt
data class DataEntity(
@SerializedName("name")
val fullName: String
}

我通过以下方式从 ModelView 调用代码:
viewModelScope.launch {
try {
val webResponse = MyAPI.create().fetchData().await()
Log.d( tag, webResponse.toString() )
}
catch ( e : Exception )
{
Log.d( tag, "Exception: " + e.message )
}
}

但我不断得到:
Unable to invoke no-args constructor for retrofit2.Call<com.host.myproject.net.response.MyResponse>. Registering an InstanceCreator with Gson for this type may fix this problem.

我似乎无法找到解决此问题的方法.. 有什么提示吗?

编辑:

JSON 响应:
[
{
"name": "A"
},
{
"name": "B"
},
{
"name": "C"
}
]

最佳答案

问题是你尝试结合suspendCall<T>返回类型。当您使用 suspend你应该让 Retrofit 函数直接返回数据,像这样:

suspend fun fetchData() : List<DataEntity> // Note: Not MyResponse, see below

然后你所要做的就是删除 .await()当你打电话时,像这样:
// Will throw exception unless HTTP 2xx is returned
val webResponse = MyAPI.create().fetchData()

请注意,您不应该使用 MyResponse类,因为 JSON 直接返回一个数组。

关于kotlin - 无法为 retrofit2.Call 调用无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58429501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com