ワンクリックで
kuikly-network-and-json
Kuikly NetworkModule 网络请求与 JSONObject/JSONArray 数据处理助手。在Kuikly中发起网络请求、处理 JSON 数据、上传下载二进制等场景时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Kuikly NetworkModule 网络请求与 JSONObject/JSONArray 数据处理助手。在Kuikly中发起网络请求、处理 JSON 数据、上传下载二进制等场景时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Analyze KuiklyUI Compose DSL recomposition performance issues from Recomposition Profiler output. Use when the user mentions 重组分析、重组优化、卡顿分析、recomp 报告、recomposition analysis, or asks to analyze profiler_report.json / profiler_frames.jsonl log files generated by KuiklyUI Recomposition Profiler.
Kuikly UI 框架开发助手。帮助使用 Kuikly 组件(View、Text、Button、List、Image、Modal、ActionSheet、Input、Scroller、Tabs 等 UI 组件)和模块(Router、Network、SP、Notify 等系统模块),自动提供正确的 import 语句、API 使用方法和完整代码示例。支持传统 Kuikly DSL(attr/event)和 Compose DSL 两种开发方式。适用场景:Kuikly 页面开发、组件使用、布局实现、事件处理、FlexBox 布局、响应式状态管理、动画效果、页面路由跳转、网络请求、列表渲染、自定义组件/模块扩展、Kuikly 编码问题、KuiklyUI 开发。
Kuikly DSL 动画开发助手(Kuikly DSL)。指导使用声明式和命令式两种方式实现 transform、opacity、backgroundColor、frame 等属性动画,涵盖串行/并行编排与动画取消。当用户需要实现动画效果时使用。
Kuikly 资源文件管理与加载助手。指导如何在 Kuikly 中添加、打包和加载 assets 资源,包括目录结构规范(common/页面资源)、各平台打包配置(Android/iOS/鸿蒙/H5/微信小程序/动态化)、ImageUri API 使用。当用户需要在 Kuikly 中使用本地图片资源、配置 assets 打包时使用。
Compose DSL 混用 Kuikly DSL 完整开发助手。指导如何在 Compose DSL 页面中嵌入 Kuikly DSL 组件(DeclarativeBaseView / ViewContainer)及在 Compose 中调用 Kuikly Module。当用户需要在 Compose 页面中复用 Kuikly DSL 组件、封装原生 View 为 Composable、在 Compose 中调用 Kuikly Module时使用。
Kuikly 协程与多线程编程助手。指导如何在 Kuikly 中进行异步编程,包括 Kuikly 内建协程、kotlinx 协程、kuiklyx 协程库。当用户在 Kuikly 中需要执行异步任务、切换线程、使用协程、回到 Kuikly 线程更新 UI、排查线程安全问题时使用。
| name | kuikly-network-and-json |
| description | Kuikly NetworkModule 网络请求与 JSONObject/JSONArray 数据处理助手。在Kuikly中发起网络请求、处理 JSON 数据、上传下载二进制等场景时使用。 |
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME) 获取(找不到时抛异常),或用 getModule<NetworkModule>(NetworkModule.MODULE_NAME) 安全获取(找不到返回 null)。推荐 lazy 缓存实例。LocalActivity.current.getPager() 获取 Pager 实例,再调用 pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)。在 ComposeContainer 类内部(非 @Composable 上下文)可直接调用 acquireModule。success,为 true 时才安全使用 data。失败时通过 errorMsg 和 response.statusCode(注意:Int? 可空)排查。httpRequest / httpRequestBinary 可指定 timeout(秒),默认 30。{"data": "原始内容"},通过 data.optString("data") 获取。方法选择:
| 场景 | 方法 |
|---|---|
| 简单 GET(无自定义 headers) | requestGet(url, param, callback) |
| 简单 POST(无自定义 headers) | requestPost(url, param, callback) |
| 自定义 headers / Cookie / 超时 | httpRequest(url, isPost, param, headers, cookie, timeout, callback) |
完整方法签名和参数说明见 NetworkModule API 参考。
Kuikly DSL(在 Pager / ComposeView 中):
import com.tencent.kuikly.core.module.NetworkModule
// lazy 延迟初始化(推荐)
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}
Compose DSL(在 @Composable 函数中):
import com.tencent.kuikly.core.module.NetworkModule
import com.tencent.kuikly.compose.ui.platform.LocalActivity
import com.tencent.kuikly.core.pager.Pager
@Composable
fun MyScreen() {
val pager = LocalActivity.current.getPager() as Pager
val networkModule = pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
// 使用 networkModule 发起请求...
}
Compose DSL(在 ComposeContainer 类内部):
@Page("MyComposePage")
class MyComposePage : ComposeContainer() {
// ComposeContainer 继承自 Pager,可直接调用 acquireModule
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}
}
networkModule.requestGet(
"https://example.com/api/data",
JSONObject().apply { put("key", "value") }
) { data, success, errorMsg, response ->
if (success) {
val name = data.optString("name")
val count = data.optInt("count")
} else {
val statusCode = response.statusCode // Int? 可能为 null
}
}
networkModule.requestPost(
"https://example.com/api/submit",
JSONObject().apply {
put("username", "test")
put("password", "123456")
}
) { data, success, errorMsg, response ->
if (success) {
val result = data.optString("result")
}
}
networkModule.httpRequest(
url = "https://example.com/api/data",
isPost = true,
param = JSONObject().apply { put("id", 1) },
headers = JSONObject().apply {
put("Content-Type", "application/json")
put("Authorization", "Bearer token")
},
cookie = "session_id=abc123",
timeout = 30
) { data, success, errorMsg, response ->
// response.statusCode - HTTP 状态码(Int?)
// response.headerFields - 响应头(JSONObject)
if (success) { /* 处理数据 */ }
}
方法选择:
| 场景 | 方法 |
|---|---|
| 下载二进制(GET) | requestGetBinary(url, param, callback) |
| 上传二进制(POST) | requestPostBinary(url, bytes, callback) |
| 自定义 headers / Cookie / 超时 | httpRequestBinary(url, isPost, bytes, param, headers, cookie, timeout, callback) |
requestPostBinary内部param传 null。若需同时传 binary body 和 query 参数,使用httpRequestBinary。
networkModule.requestGetBinary(
"https://example.com/file.png",
JSONObject()
) { data, success, errorMsg, response ->
if (success) {
val fileBytes: ByteArray = data
}
}
networkModule.requestPostBinary(
"https://example.com/upload",
imageBytes
) { data, success, errorMsg, response ->
if (success) {
val responseBytes: ByteArray = data
}
}
networkModule.httpRequestBinary(
url = "https://example.com/api/binary",
isPost = true,
bytes = uploadBytes,
param = JSONObject().apply { put("type", "image") },
headers = JSONObject().apply { put("Content-Type", "application/octet-stream") },
cookie = "session_id=abc123",
timeout = 60
) { data, success, errorMsg, response ->
if (success) {
val responseBytes: ByteArray = data
}
}
使用 opt* 系列方法安全读取(不会抛异常,返回默认值)。
完整的 JSONObject/JSONArray API 列表见 JSON API 参考。
val jsonObj = JSONObject(jsonString)
// 安全读取(不存在时返回默认值)
val str = jsonObj.optString("key") // 默认 ""
val num = jsonObj.optInt("key") // 默认 0
val innerObj = jsonObj.optJSONObject("nested") // JSONObject?
val array = jsonObj.optJSONArray("list") // JSONArray?
// 写入
jsonObj.put("key", "value")
// 遍历所有 key
for (key in jsonObj.keys()) { /* ... */ }
val jsonArr = jsonObj.optJSONArray("list") ?: JSONArray()
for (i in 0 until jsonArr.length()) {
val item = jsonArr.optJSONObject(i) ?: continue
val name = item.optString("name")
}