kuikly-network-and-json
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseKuikly 网络请求
Kuikly 网络请求
Contents
Contents
Core Guidelines
Core Guidelines
- 获取 NetworkModule:
- Kuikly DSL(Pager / ComposeView): 直接调用 获取(找不到时抛异常),或用
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)安全获取(找不到返回 null)。推荐getModule<NetworkModule>(NetworkModule.MODULE_NAME)缓存实例。lazy - Compose DSL(@Composable 函数中): 通过 获取 Pager 实例,再调用
LocalActivity.current.getPager()。在 ComposeContainer 类内部(非 @Composable 上下文)可直接调用pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)。acquireModule
- Kuikly DSL(Pager / ComposeView): 直接调用
- 检查 success: 回调中先判断 ,为
success时才安全使用true。失败时通过data和errorMsg(注意:response.statusCode可空)排查。Int? - 设置超时: /
httpRequest可指定httpRequestBinary(秒),默认 30。timeout - 非 JSON 回包: SDK 自动包装为 ,通过
{"data": "原始内容"}获取。data.optString("data")
- 获取 NetworkModule:
- Kuikly DSL(Pager / ComposeView): 直接调用 获取(找不到时抛异常),或用
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)安全获取(找不到返回 null)。推荐getModule<NetworkModule>(NetworkModule.MODULE_NAME)缓存实例。lazy - Compose DSL(@Composable 函数中): 通过 获取 Pager 实例,再调用
LocalActivity.current.getPager()。在 ComposeContainer 类内部(非 @Composable 上下文)可直接调用pager.acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)。acquireModule
- Kuikly DSL(Pager / ComposeView): 直接调用
- 检查 success: 回调中先判断 ,为
success时才安全使用true。失败时通过data和errorMsg(注意:response.statusCode可空)排查。Int? - 设置超时: /
httpRequest可指定httpRequestBinary(秒),默认 30。timeout - 非 JSON 回包: SDK 自动包装为 ,通过
{"data": "原始内容"}获取。data.optString("data")
Workflow: HTTP Requests
Workflow: HTTP Requests
方法选择:
| 场景 | 方法 |
|---|---|
| 简单 GET(无自定义 headers) | |
| 简单 POST(无自定义 headers) | |
| 自定义 headers / Cookie / 超时 | |
完整方法签名和参数说明见 NetworkModule API 参考。
方法选择:
| 场景 | 方法 |
|---|---|
| 简单 GET(无自定义 headers) | |
| 简单 POST(无自定义 headers) | |
| 自定义 headers / Cookie / 超时 | |
完整方法签名和参数说明见 NetworkModule API 参考。
获取 NetworkModule
获取 NetworkModule
Kuikly DSL(在 Pager / ComposeView 中):
kotlin
import com.tencent.kuikly.core.module.NetworkModule
// lazy 延迟初始化(推荐)
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}Compose DSL(在 @Composable 函数中):
kotlin
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 类内部):
kotlin
@Page("MyComposePage")
class MyComposePage : ComposeContainer() {
// ComposeContainer 继承自 Pager,可直接调用 acquireModule
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}
}Kuikly DSL(在 Pager / ComposeView 中):
kotlin
import com.tencent.kuikly.core.module.NetworkModule
// lazy 延迟初始化(推荐)
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}Compose DSL(在 @Composable 函数中):
kotlin
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 类内部):
kotlin
@Page("MyComposePage")
class MyComposePage : ComposeContainer() {
// ComposeContainer 继承自 Pager,可直接调用 acquireModule
private val networkModule by lazy(LazyThreadSafetyMode.NONE) {
acquireModule<NetworkModule>(NetworkModule.MODULE_NAME)
}
}GET 请求
GET 请求
kotlin
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
}
}kotlin
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 请求
POST 请求
kotlin
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")
}
}kotlin
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)
通用请求(httpRequest)
kotlin
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) { /* 处理数据 */ }
}kotlin
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
Workflow: Binary Requests
方法选择:
| 场景 | 方法 |
|---|---|
| 下载二进制(GET) | |
| 上传二进制(POST) | |
| 自定义 headers / Cookie / 超时 | |
内部requestPostBinary传 null。若需同时传 binary body 和 query 参数,使用param。httpRequestBinary
方法选择:
| 场景 | 方法 |
|---|---|
| 下载二进制(GET) | |
| 上传二进制(POST) | |
| 自定义 headers / Cookie / 超时 | |
内部requestPostBinary传 null。若需同时传 binary body 和 query 参数,使用param。httpRequestBinary
下载二进制(GET)
下载二进制(GET)
kotlin
networkModule.requestGetBinary(
"https://example.com/file.png",
JSONObject()
) { data, success, errorMsg, response ->
if (success) {
val fileBytes: ByteArray = data
}
}kotlin
networkModule.requestGetBinary(
"https://example.com/file.png",
JSONObject()
) { data, success, errorMsg, response ->
if (success) {
val fileBytes: ByteArray = data
}
}上传二进制(POST)
上传二进制(POST)
kotlin
networkModule.requestPostBinary(
"https://example.com/upload",
imageBytes
) { data, success, errorMsg, response ->
if (success) {
val responseBytes: ByteArray = data
}
}kotlin
networkModule.requestPostBinary(
"https://example.com/upload",
imageBytes
) { data, success, errorMsg, response ->
if (success) {
val responseBytes: ByteArray = data
}
}通用二进制请求(httpRequestBinary)
通用二进制请求(httpRequestBinary)
kotlin
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
}
}kotlin
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
Workflow: Parsing JSON
使用 系列方法安全读取(不会抛异常,返回默认值)。
opt*完整的 JSONObject/JSONArray API 列表见 JSON API 参考。
使用 系列方法安全读取(不会抛异常,返回默认值)。
opt*完整的 JSONObject/JSONArray API 列表见 JSON API 参考。
核心用法示例
核心用法示例
kotlin
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()) { /* ... */ }kotlin
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 遍历
JSONArray 遍历
kotlin
val jsonArr = jsonObj.optJSONArray("list") ?: JSONArray()
for (i in 0 until jsonArr.length()) {
val item = jsonArr.optJSONObject(i) ?: continue
val name = item.optString("name")
}kotlin
val jsonArr = jsonObj.optJSONArray("list") ?: JSONArray()
for (i in 0 until jsonArr.length()) {
val item = jsonArr.optJSONObject(i) ?: continue
val name = item.optString("name")
}参考资源
参考资源
- NetworkModule API 参考
- JSONObject/JSONArray API 参考
- NetworkModule API 参考
- JSONObject/JSONArray API 参考