android - Retrofit 中从 AsyncTask 到 Coroutines 的转换:IllegalArgumentException
问题描述
IllegalArgumentException
在从AsyncTask
(之前)到Kotlin Coroutines
(之后)进行最小更改时,我不断收到错误。请注意,代码与AsyncTask
.
注意:改造正在调用我自己的.php
脚本,该脚本返回一些以字符串SimpleResultObject
编码的对象。json
变更前:
改造:
@FormUrlEncoded
@POST("activity_signup.php")
fun activitySignUp(
@Field("activity_id") activityId: Int,
@Field("user_id") userId: Int) : Call<SimpleResultObject>
活动(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
活动:
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: No Retrofit annotation found. (parameter #3) for method RetrofitAPI.activitySignUp
_service.activitySignUp
注意:myActivityScope
是CoroutineScope
在举办活动结束时完成的服装。
我已经尝试了我能记住的一切:添加OkHttpClient
、更改为MoshiConverterFactory
、尝试其他 CoroutineScopes 和 Dispatchers,...
.php
编辑:由于高于我的参数编号(可能是空结果?),问题可能在我这边Exeption
,但不知道为什么以前有效的东西现在不起作用。
解决方案
根据对问题的回答,我对代码进行了一些修改并设法解决了这个问题。正如@Mohammad Sianaki 指出的那样,最重要的是将改造版本从 25.0.0 提高到 26.0.0 以解决问题。
IllegalArgumentException
因此,对于可能在参数编号上方获得 for 参数的其他所有人-考虑检查 Retrofit 版本。
特别感谢所有提供帮助的人,尤其是@CommonsWare!
推荐阅读
- java - 传递给 verify() 的参数是 Scanner 类型,不是模拟
- java - 我可以使用 Springfox 从 swaggerui url 获取 Swagger json 吗?
- bootstrap-4 - Fontawesome5 旋转堆叠和变形的图标放错了位置,如何解决?
- sql - 雪花:用双引号选择“COLUMN”
- java - 在 Android Studio 中永远不会调用 onLocationUpdate
- kubernetes - 具有无限/未知数量的工作项(完成)的 k8s 作业
- sql - 如何提取似乎是 .zip 的 .sql 文件
- php - 获取消息的 MIME 版本导致“405 方法不允许”-错误
- php - 如何在 laravel 中将 user_id 附加到 URL 的末尾?
- docker - GitLab:无法注册跑步者(使用正确的令牌!) - 干净/最新的 docker install