Kotlin中用Retrofit+协程提交Form Data:后续步骤咨询
在Kotlin中用Retrofit+协程提交Form Data的完整流程
第一步:定义Retrofit接口(核心环节)
首先得写一个接口来描述你的API请求,用Retrofit的注解指定请求类型和参数规则:
interface ApiService { // 标记这是Form Data格式的请求(application/x-www-form-urlencoded) @FormUrlEncoded @POST("替换成你的实际接口路径") // 比如 "/api/get-subscriber" // 用suspend关键字让函数支持协程,不用再写回调 suspend fun getSubscriber(@FieldMap params: Map<String, String>): YourResponseModel // 替换成你实际的响应数据类 }
注解说明:
@FormUrlEncoded:必须加,告诉Retrofit按Form Data格式编码参数@FieldMap:批量传递键值对参数,比单个@Field更适合你的场景suspend:标记为挂起函数,直接在协程里调用就行,不用处理Call对象
第二步:生成接口实例
用你已经初始化好的Retrofit对象,创建ApiService的实例:
// 放在Retrofit Builder代码后面 val apiService = api.create(ApiService::class.java)
第三步:在协程里发起请求并处理结果
把请求逻辑写到你已经创建的lifecycleScope协程块里,同时处理成功和异常情况:
lifecycleScope.launch(Dispatchers.IO) { try { // 把你的List转成Map,适配@FieldMap的要求 val params = formData.toMap() // 调用挂起函数发起请求,这里会自动挂起直到请求完成 val response = apiService.getSubscriber(params) // 请求成功后切回主线程更新UI(lifecycleScope可以安全切换) withContext(Dispatchers.Main) { // 这里写成功后的逻辑,比如更新UI、弹窗提示 // 示例:tv_result.text = "查询成功:${response.data?.phoneNumber}" } } catch (e: Exception) { // 捕获所有异常:网络断连、解析失败、后端报错等 withContext(Dispatchers.Main) { // 处理错误,比如给用户提示 // 示例:Toast.makeText(context, "请求失败:${e.message}", Toast.LENGTH_SHORT).show() } } }
补充细节
- 响应数据类:得根据后端返回的JSON结构写对应的Kotlin数据类,比如:
// 示例结构,根据实际返回修改 data class YourResponseModel( val code: Int, val msg: String, val data: SubscriberInfo? ) data class SubscriberInfo( val id: String, val phoneNumber: String, val userName: String )
- 依赖确认:确保你的build.gradle里加了必要的依赖(版本可以按需更新):
// Retrofit核心 implementation 'com.squareup.retrofit2:retrofit:2.9.0' // Gson转换器,用来解析JSON响应 implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // 协程依赖(Android端) implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
- 特殊情况处理:如果后端要求的是
multipart/form-data(比如要上传文件),那得换成@Multipart和@PartMap注解,但你的场景是普通键值对,用上面的@FormUrlEncoded就够了。
内容的提问来源于stack exchange,提问作者Wanjala Alex
相关产品推荐
相关产品推荐

