mcpField
K
kuikly-network-and-json

kuikly-network-and-json

github.com/tencent-tds開発134439 回インストール11 週間前に更新
リポジトリ

kuikly-network-and-json について

Kuikly 開発者向けのネットワークと JSON のガイドです。HTTP・バイナリーリクエスト、レスポンス処理、安全な JSON 解析を扱います。

主な機能

  1. 01NetworkModule の取得とキャッシュ
  2. 02GET・POST・汎用 HTTP リクエスト
  3. 03バイナリーデータのアップロードとダウンロード
  4. 04ヘッダー・Cookie・タイムアウトの設定
  5. 05opt メソッドによる安全な JSON 読み取り

活用シーン

  1. 01API への GET または POST リクエスト
  2. 02ファイルのアップロードやバイナリー取得
  3. 03任意フィールドを含む JSON レスポンスの解析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tencent-tds/kuiklyui-ai --skill kuikly-network-and-json

インストール後、Claude Code で/kuikly-network-and-jsonを入力して読み込まれたか確認します。

同梱ファイルreferences/JSON_API_REFERENCE.mdreferences/NETWORK_API_REFERENCE.md

詳細

プロジェクトの README より

Kuikly 网络请求

Contents

Core Guidelines

  • 获取 NetworkModule:
    • Kuikly DSL(Pager / ComposeView): 直接调用 acquireModule<NetworkModule>(NetworkModule.MODULE_NAME) 获取(找不到时抛异常),或用 getModule<NetworkModule>(NetworkModule.MODULE_NAME) 安全获取(找不到返回 null)。推荐 lazy 缓存实例。
    • Compose DSL(@Composable 函数中): 通过 LocalActivity.current.getPager() 获取 Pager 实例,再调用 pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)。在 ComposeContainer 类内部(非 @Composable 上下文)可直接调用 acquireModule。
  • 检查 success: 回调中先判断 success,为 true 时才安全使用 data。失败时通过 errorMsg 和 response.statusCode(注意:Int? 可空)排查。
  • 设置超时: httpRequest / httpRequestBinary 可指定 timeout(秒),默认 30。
  • 非 JSON 回包: SDK 自动包装为 {"data": "原始内容"},通过 data.optString("data") 获取。

Workflow: HTTP Requests

方法选择:

场景方法
简单 GET(无自定义 headers)requestGet(url, param, callback)
简单 POST(无自定义 headers)requestPost(url, param, callback)
自定义 headers / Cookie / 超时httpRequest(url, isPost, param, headers, cookie, timeout, callback)

完整方法签名和参数说明见 NetworkModule API 参考。

获取 NetworkModule

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)
    }
}
GET 请求
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
    }
}
POST 请求
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")
    }
}
通用请求(httpRequest)
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) { /* 处理数据 */ }
}

Workflow: Binary Requests

方法选择:

场景方法
下载二进制(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。

下载二进制(GET)
networkModule.requestGetBinary(
    "https://example.com/file.png",
    JSONObject()
) { data, success, errorMsg, response ->
    if (success) {
        val fileBytes: ByteArray = data
    }
}
上传二进制(POST)
networkModule.requestPostBinary(
    "https://example.com/upload",
    imageBytes
) { data, success, errorMsg, response ->
    if (success) {
        val responseBytes: ByteArray = data
    }
}
通用二进制请求(httpRequestBinary)
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
    }
}

Workflow: Parsing JSON

使用 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()) { /* ... */ }
JSONArray 遍历
val jsonArr = jsonObj.optJSONArray("list") ?: JSONArray()
for (i in 0 until jsonArr.length()) {
    val item = jsonArr.optJSONObject(i) ?: continue
    val name = item.optString("name")
}

参考资源

コメント