gpt4 book ai didi

android - Retrofit 中从 AsyncTask 到 Coroutines 的转换 : IllegalArgumentException

转载 作者:行者123 更新时间:2023-11-29 00:51:30 25 4
gpt4 key购买 nike

在对从 AsyncTask(之前)到 Kotlin Coroutines(之后)的过渡进行最小更改时,我不断收到错误 IllegalArgumentException。请注意,代码与 AsyncTask 一起按预期工作。

注意:Retrofit 正在调用我自己的 .php 脚本,该脚本返回一些用 json 字符串编码的对象 SimpleResultObject

变更前:

改造:

@FormUrlEncoded
@POST("activity_signup.php")
fun activitySignUp(
@Field("activity_id") activityId: Int,
@Field("user_id") userId: Int) : Call<SimpleResultObject>

Activity (AsyncTask 内部):

@Override
protected doInBackground(...) {

val gson = GsonBuilder().setLenient().create()
val retrofit = Retrofit.Builder()
.baseUrl(LOCALHOST_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()

val service = retrofit.create(RetrofitAPI::class.java)
val call = service.activitySignUp(activity_id, userId)
call.enqueue(Callback<SimpleResultObject>() {}

@onResponse 方法中接收对象并正常进行。

变更后:

改造:

 @FormUrlEncoded
@POST("activity_signup.php")
suspend fun activitySignUp(
@Field("activity_id") activityId: Int,
@Field("user_id") userId: Int): SimpleResultObject

Activity :

 fun signUp() {
myActivityScope.launch(Dispatchers.Main) {

val gson = GsonBuilder().setLenient().create()
val retrofit = Retrofit.Builder()
.baseUrl(LOCALHOST_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build()

val service = retrofit.create(RetrofitAPI::class.java)
try {
val result = service.activitySignUp(specificResultObject.activityId, userId)
} catch (t:Throwable)

抛出 java.lang.IllegalArgumentException:未找到 Retrofit 注释。 (参数 #3)用于方法 RetrofitAPI.activitySignUpservice.activitySignUp 行调用

注意:myActivityScope 是costum CoroutineScope,它在托管Activity 结束时完成。

我已经尝试了我能记住的一切:添加 OkHttpClient,更改为 MoshiConverterFactory,尝试其他 CoroutineScopes 和 Dispatchers,...

编辑:问题可能出在我的 .php 端,因为 Exeption 高于我的参数编号(可能是空结果?),但不知道为什么以前行得通的现在行不通了。

最佳答案

根据对问题的回答,我对代码进行了一些修改并设法解决了问题。正如@Mohammad Sianaki 指出的那样,最重要的是将 Retrofit 版本从 25.0.0 升级到 26.0.0 以解决问题

因此,对于可能因参数编号上方的参数而得到 IllegalArgumentException 的其他所有人 - 考虑检查 Retrofit 版本

特别感谢所有提供帮助的人,尤其是@CommonsWare!

关于android - Retrofit 中从 AsyncTask 到 Coroutines 的转换 : IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59145838/

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