下面给出 **Fuel 2.x** 的 **“开箱即用”** 封装类,**同时支持**:

下面给出 Fuel 2.x 的 "开箱即用" 封装类,同时支持:

  • POST JSON (application/json)
  • POST 表单 (application/x-www-form-urlencoded)
  • 文件上传 (multipart/form-data)

复制即用 ,零配置 ,自动切回主线程回调。


✅ 1. 添加依赖(build.gradle)

kotlin 复制代码
implementation 'com.github.kittinunf.fuel:fuel:2.3.1'
implementation 'com.github.kittinunf.fuel:fuel-android:2.3.1'   // 自动切主线程
implementation 'com.github.kittinunf.fuel:fuel-gson:2.3.1'      // JSON 自动序列化

✅ 2. 封装类(copy 即用)

kotlin 复制代码
object HttpFuel {

    /* ① POST JSON ---------------------------------------------------------- */
    fun postJson(
        url: String,
        body: Any,                      // 任意对象 / Map / String
        onSuccess: (String) -> Unit,
        onError: (String) -> Unit
    ) {
        Fuel.post(url)
            .jsonBody(Gson().toJson(body))        // 自动转 JSON
            .responseString { _, _, result ->
                val (data, error) = result
                if (error == null) onSuccess(data!!)
                else onError(error.message)
            }
    }

    /* ② POST 表单 ---------------------------------------------------------- */
    fun postForm(
        url: String,
        params: List<Pair<String, Any?>>,
        onSuccess: (String) -> Unit,
        onError: (String) -> Unit
    ) {
        Fuel.post(url, params.filterNotNull())
            .responseString { _, _, result ->
                val (data, error) = result
                if (error == null) onSuccess(data!!)
                else onError(error.message)
            }
    }

    /* ③ 上传文件(可带表单字段) ------------------------------------------- */
    fun upload(
        url: String,
        params: List<Pair<String, Any?>> = emptyList(),
        file: File,
        fileKey: String = "file",
        onProgress: (Long, Long) -> Unit = { _, _ -> },
        onSuccess: (String) -> Unit,
        onError: (String) -> Unit
    ) {
        Fuel.upload(url, Method.POST, params)
            .source { _, _ -> file }
            .name { fileKey }
            .progress { read, total -> onProgress(read, total) }
            .responseString { _, _, result ->
                val (data, error) = result
                if (error == null) onSuccess(data!!)
                else onError(error.message)
            }
    }
}

✅ 3. 使用示例(Activity / ViewModel)

kotlin 复制代码
/* 3.1 发 JSON */
HttpFuel.postJson(
    url = "http://192.168.1.100:8809/sync/one688",
    body = mapOf("ben" to ben)        // 任意对象/Map
) { resp -> Log.d("JSON", resp) }

/* 3.2 发表单 */
HttpFuel.postForm(
    url = "http://192.168.1.100:8809/sync/one688",
    params = listOf("id" to 0, "tlite" to "text")
) { resp -> Log.d("FORM", resp) }

/* 3.3 上传文件 + 进度 */
val file = File(cacheDir, "a.jpg")
HttpFuel.upload(
    url = "http://192.168.1.100:8809/upload",
    params = listOf("user" to "tom"),
    file = file,
    onProgress = { read, total ->
        val pct = (read * 100 / total).toInt()
        Log.d("UP", "$pct%")
    }
) { resp -> Log.d("UP", "完成:$resp") }

✅ 4. 自动切回主线程

fuel-android 模块已保证 回调在主线程 ,可直接更新 UI 。


✅ 5. 自定义全局配置(可选)

kotlin 复制代码
FuelManager.instance.basePath = "http://192.168.1.100:8809/"
FuelManager.instance.baseHeaders = mapOf("token" to "abc123")

🔚 一句话总结

引入 fuel + fuel-android + fuel-gson → 复制 HttpFuel 单例 →
postJson / postForm / upload 三种调用 开箱即用 ,主线程回调 ,零配置发请求 。

相关推荐
hunterandroid26 分钟前
Android 运行时权限实战:从声明权限到拒绝后的可用降级
android
a59865238 分钟前
docker-android 6080 端口访问失败?
android·docker·容器·云手机
天意__1 小时前
Android手机上部署Linux服务器 在Termux里安装Ubuntu
android·linux·服务器
恋猫de小郭2 小时前
Flutter Android 改动:APK 不再允许通过 Intent 动态修改 Engine 参数
android·前端·flutter
修船大队长3 小时前
KL15 高电平请求 FullCom:AUTOSAR 项目调用流程
android·java·服务器
三少爷的鞋3 小时前
毁掉 Android 现代架构,只需要一个自定义的“FlowBus”
android
jack1868914 小时前
安卓手机忘记锁屏密码怎么办? 无需密码也可解锁
android·智能手机
应用市场17 小时前
不用一张图片的像素小游戏:小人是字符串,房间是矩形,平衡靠两千个假玩家
android·kotlin·游戏开发
stevenzqzq18 小时前
android 对渠道的理解
android
QEasycloud18 小时前
BOM接口抛转失败钉钉通知策略实战教程:MySQL异常日志到钉钉消息的端到端配置
android·mysql·钉钉