uni-app Android7.1.2 向UTS环境中传递数组参数报错
uni-app Android7.1.2 向UTS环境中传递数组参数报错
示例代码:
{
"devDependencies": {
"@dcloudio/types": "^3.3.2",
"@dcloudio/uni-app-uts": "3.0.0-4010520240507001",
"@dcloudio/uni-automator": "3.0.0-4010520240507001",
"@dcloudio/uni-cli-shared": "3.0.0-4010520240507001",
"@dcloudio/uni-stacktracey": "3.0.0-4010520240507001",
"@dcloudio/uni-uts-v1": "3.0.0-4010520240507001",
"@dcloudio/vite-plugin-uni": "3.0.0-4010520240507001"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-4010520240507001",
"@dcloudio/uni-app-plus": "3.0.0-4010520240507001",
"@dcloudio/uni-components": "3.0.0-4010520240507001",
"@dcloudio/uni-h5": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-alipay": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-baidu": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-jd": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-kuaishou": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-lark": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-qq": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-toutiao": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-weixin": "3.0.0-4010520240507001",
"@dcloudio/uni-mp-xhs": "3.0.0-4010520240507001",
"@dcloudio/uni-quickapp-webview": "3.0.0-4010520240507001"
}
}
操作步骤:
export function test(paramA : Array<string>) {
console.log("paramA", paramA);
}
import { test } from '@/uni_modules/medical-sdk';
test(['字符串参数测试']);
预期结果:
期望test方法中正确打印日志 paramA,['字符串参数测试']
实际结果:
调用报错,方法未执行。
{
"error": "返回值为:\"\";请求参数为:{\"moduleName\":\"medical-sdk\",\"moduleType\":\"\",\"package\":\"uts.sdk.modules.medicalSdk\",\"class\":\"IndexKt\",\"name\":\"testByJs\",\"method\":[{\"name\":\"paramA\",\"type\":\"string\"}],\"params\":[[\"字符串参数测试\"]]}"
}
bug描述:
uni-app 中向UTS环境中传递数组参数将会导致方法无法执行并报错如下:
{
"error": "返回值为:\"\";请求参数为:{\"moduleName\":\"medical-sdk\",\"moduleType\":\"\",\"package\":\"uts.sdk.modules.medicalSdk\",\"class\":\"IndexKt\",\"name\":\"testByJs\",\"method\":[{\"name\":\"paramA\",\"type\":\"string\"}],\"params\":[[\"字符串参数测试\"]]}"
}
经过测试:
- 传入string正常,string[]报错。
- 切换运行环境,接入模拟器正常传入string[],模拟器为mumu模拟器安卓版本为12。
- 尝试设置targetSdkVersion为25,打自定义基座后还是无效。
- 切换另一台物理设备安卓版本为11后正常调用并打印日志。
- 切换另一台物理设备安卓版本为7.1.1后还是无效。
2 回复
请问下问题解决了吗
在处理 uni-app
向 UTS(通常指统一测试服务或其他自定义服务)环境中传递数组参数报错的问题时,我们需要确保数组在传递过程中被正确序列化和反序列化。以下是一个可能的解决方案,展示了如何在 uni-app
中发送数组参数,并在服务器端接收并处理这些参数。
前端(uni-app)代码示例
假设我们有一个数组 dataArray
需要传递给 UTS 环境:
// 在 uni-app 的某个页面或组件中
const dataArray = [1, 2, 3, 'four', 'five'];
uni.request({
url: 'https://your-uts-endpoint.com/api/receiveArray', // 替换为你的 UTS 端点
method: 'POST',
header: {
'Content-Type': 'application/json' // 确保请求头设置为 JSON
},
data: {
array: dataArray
},
success: (res) => {
console.log('请求成功:', res.data);
},
fail: (err) => {
console.error('请求失败:', err);
}
});
后端(Node.js 示例,假设 UTS 使用 Express)
在后端,我们需要确保能够正确解析传入的 JSON 数据:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用 body-parser 中间件解析 JSON 请求体
app.use(bodyParser.json());
app.post('/api/receiveArray', (req, res) => {
const receivedArray = req.body.array;
if (Array.isArray(receivedArray)) {
console.log('成功接收到数组:', receivedArray);
// 处理接收到的数组,例如保存到数据库或进行其他逻辑处理
res.status(200).json({ message: '数组接收成功', array: receivedArray });
} else {
console.error('接收到的不是数组:', receivedArray);
res.status(400).json({ message: '无效的数组参数' });
}
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`服务器正在监听端口 ${PORT}`);
});
注意事项
- 确保端点正确:在
uni.request
中,URL 必须正确指向 UTS 服务的端点。 - Content-Type:请求头中的
Content-Type
应设置为application/json
以确保数据以 JSON 格式发送。 - 错误处理:在前端和后端都应妥善处理可能的错误,例如网络问题、数据解析失败等。
- 数组验证:在后端接收数据时,验证数据是否为数组是一个好习惯,可以防止潜在的安全问题。
如果以上代码仍然导致报错,请检查具体的错误信息,可能是由于网络问题、服务器配置错误、数据格式不匹配等其他原因引起的。