Kotlin/Fuel 使用apply时出现Unresolved reference: responseString错误如何解决
问题原因
- API归属错误:
responseString()是Request类的专属执行方法,你调用方法的对象是FuelManager配置类实例,本身没有这个方法,自然报未定义引用错误。 - 配置未落地到请求实例:
FuelManager.request()方法调用后会生成一个全新的Request请求对象,你两次调用该方法都没有将生成的请求实例保存下来,所有针对请求的配置都没有绑定到可执行的请求对象上。 - 逻辑冗余:同一个POST请求你重复构造了两次,第二次添加payload时生成的新请求完全覆盖了第一次的配置,没有任何意义。
修复方案
这里提供两种适配不同场景的实现方式:
场景1:仅需构造单个请求,不需要复用FuelManager配置
调整工厂函数直接返回可配置的Request实例即可:
fun createPostRequest(ctx: Ctx, url: String): Request { val manager = FuelManager().apply { timeoutReadInMillisecond = 8_000 timeoutInMillisecond = 4_000 baseHeaders = mapOf( "Content-Type" to "application/json", "X-API-Key" to ctx.conf.get(ConfValues.ApiSecret) ) } // 直接返回构造好的Request对象,后续可以直接追加个性化配置 return manager.request(Method.POST, url) }
调用示例:
val request = createPostRequest(ctx, url) payload?.let { request.body(it.toString()) } // 正常执行请求获取返回 val (_, response, data) = request.responseString()
场景2:需要复用FuelManager通用配置给多个请求
把通用配置和单请求构造逻辑拆分,避免重复生成FuelManager实例:
// 生成通用配置的FuelManager,可复用给所有同配置的请求 fun createCommonFuelManager(ctx: Ctx) = FuelManager().apply { timeoutReadInMillisecond = 8_000 timeoutInMillisecond = 4_000 baseHeaders = mapOf( "Content-Type" to "application/json", "X-API-Key" to ctx.conf.get(ConfValues.ApiSecret) ) }
调用示例:
val commonManager = createCommonFuelManager(ctx) // 构造第一个请求 val request1 = commonManager.request(Method.POST, url1).apply { payload1?.let { body(it.toString()) } } val res1 = request1.responseString() // 构造第二个同配置的不同请求 val request2 = commonManager.request(Method.GET, url2) val res2 = request2.responseString()
内容的提问来源于stack exchange,提问作者Leff
相关产品推荐
相关产品推荐

