uni-app Android7.1.2 向UTS环境中传递数组参数报错

发布于 1周前 作者 sinazl 来自 Uni-App

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\":[[\"字符串参数测试\"]]}"
}

经过测试:

  1. 传入string正常,string[]报错。
  2. 切换运行环境,接入模拟器正常传入string[],模拟器为mumu模拟器安卓版本为12。
  3. 尝试设置targetSdkVersion为25,打自定义基座后还是无效。
  4. 切换另一台物理设备安卓版本为11后正常调用并打印日志。
  5. 切换另一台物理设备安卓版本为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}`);
});

注意事项

  1. 确保端点正确:在 uni.request 中,URL 必须正确指向 UTS 服务的端点。
  2. Content-Type:请求头中的 Content-Type 应设置为 application/json 以确保数据以 JSON 格式发送。
  3. 错误处理:在前端和后端都应妥善处理可能的错误,例如网络问题、数据解析失败等。
  4. 数组验证:在后端接收数据时,验证数据是否为数组是一个好习惯,可以防止潜在的安全问题。

如果以上代码仍然导致报错,请检查具体的错误信息,可能是由于网络问题、服务器配置错误、数据格式不匹配等其他原因引起的。

回到顶部