其他
在 Kuikly 中发起网络请求…
适用于 Kuikly 项目通过 NetworkModule 发起 HTTP/二进制请求,并用 JSONObject/JSONArray 安全读写和遍历 JSON 数据。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 40/100 ×0.15
适用场景
在 Kuikly 中发起网络请求、处理二特定
解决思路
- Kuikly DSL(Pager / ComposeView)获取 NetworkModule:调用 `acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)` 获取,找不到会抛异常;或用 `getModule<NetworkModule>(NetworkModule.MODULE_NAME)` 安全获取,找不到返回 null;推荐用 `lazy(LazyThreadSafetyMode.NONE)` 缓存实例。
- Compose DSL 的 @Composable 函数中获取 NetworkModule:先通过 `LocalActivity.current.getPager()` 获取 Pager 实例,再调用 `pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)`。
- ComposeContainer 类内部获取 NetworkModule:ComposeContainer 继承自 Pager,在非 @Composable 上下文中可直接调用 `acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)`,并推荐用 lazy 缓存。
- 回调中处理结果:先判断 `success`,为 true 时才安全使用 `data`;失败时用 `errorMsg` 和 `response.statusCode` 排查,注意 `response.statusCode` 是 `Int?` 可空。
- 设置超时:`httpRequest` / `httpRequestBinary` 可传 `timeout`(单位秒),默认 30。
- 处理非 JSON 回包:SDK 自动包装为包含 `data` 字段的对象,用 `data.optString` 读取 `data` 字段获取原始内容。
- HTTP 简单 GET(无自定义 headers):使用 `requestGet(url, param, callback)`。
- HTTP 简单 POST(无自定义 headers):使用 `requestPost(url, param, callback)`。
- HTTP 自定义 headers / Cookie / 超时:使用 `httpRequest(url, isPost, param, headers, cookie, timeout, callback)`。
- 发起 GET 请求:调用 `networkModule.requestGet` 传入 url 和 `JSONObject().apply { put(...) }`,回调中判断 `success` 后用 `data.optString`、`data.optInt` 读取字段。
- 发起 POST 请求:调用 `networkModule.requestPost` 传入 url 和包含字段的 `JSONObject`,回调中判断 `success` 后读取 `data`。
- 发起通用请求:调用 `networkModule.httpRequest` 传入 `url`、`isPost`、`param`、`headers`、`cookie`、`timeout`;回调中可读取 `response.statusCode`(Int?)和 `response.headerFields`(JSONObject),成功时处理 `data`。
- 二进制下载(GET):使用 `requestGetBinary(url, param, callback)`。
- 二进制上传(POST):使用 `requestPostBinary(url, bytes, callback)`。
- 二进制自定义 headers / Cookie / 超时:使用 `httpRequestBinary(url, isPost, bytes, param, headers, cookie, timeout, callback)`。
- 下载二进制:调用 `networkModule.requestGetBinary` 传入 url 和 `JSONObject()`,成功时 `data` 为 `ByteArray`。
- 上传二进制:调用 `networkModule.requestPostBinary` 传入 url 和 `imageBytes`,成功时 `data` 为 `ByteArray`。
- 通用二进制请求:调用 `networkModule.httpRequestBinary` 传入 `url`、`isPost`、`bytes`、`param`、`headers`、`cookie`、`timeout`,成功时 `data` 为 `ByteArray`。
- 二进制请求注意事项:`requestPostBinary` 内部 `param` 传 null;若需同时传 binary body 和 query 参数,使用 `httpRequestBinary`。
- 构造 JSON 对象:使用 `JSONObject(jsonString)`。
- 解析 JSON 时使用 `opt*` 系列方法安全读取,不会抛异常并返回默认值:`optString` 默认空字符串,`optInt` 默认 0,`optJSONObject` 返回 `JSONObject?`,`optJSONArray` 返回 `JSONArray?`。
- JSONObject 写入与遍历:用 `put` 写入;用 `for (key in jsonObj.keys())` 遍历所有 key。
- JSONArray 遍历:先用 `jsonObj.optJSONArray` 读取 `list` 字段并兜底 `JSONArray()`,再 `for (i in 0 until jsonArr.length())` 遍历,用 `jsonArr.optJSONObject(i) ?: continue` 取每项并读取字段。
- 需要完整方法签名和参数说明时查阅 `references/NETWORK_API_REFERENCE.md` 与 `references/JSON_API_REFERENCE.md`。
适用边界 · 注意事项
- 项目未接入 Kuikly 或没有 NetworkModule 时不要使用,改用平台原生网络库或项目已有的网络封装。
- 不需要 Kuikly DSL/Compose DSL 上下文,只是普通 Kotlin/Java 工程做 JSON 解析时,不必依赖该模块。
- 服务端回包不是 SDK 包装的 JSON 格式且你已自行持有原始 body 时,不要重复按 `data` 字段拆包。