uni-app uts插件编译到安卓 Map类型的参数报错field xxx has type io.dcloud.uts.Map got java.util.LinkedHashMap

uni-app uts插件编译到安卓 Map类型的参数报错field xxx has type io.dcloud.uts.Map got java.util.LinkedHashMap

开发环境 版本号 项目创建方式
Mac 15.6.1 HBuilderX
Android 12
vivo
iQoo z3

示例代码:

在interface中定义了:
```typescript
export type MyApiOptions = {
data: Map<string, any>        //     这个参数
success ?: (res : MyApiResult) => void
fail ?: (res : MyApiFail) => void
complete ?: (res : any) => void
}  
```
使用时:
```javascript
import {myApi} from '@/uni_modules/my-plugin'  

//以下两种方式运行到安卓都报错  
const dataMap = new Map()
myApi({
data: dataMap
})
```

操作步骤:

编译到安卓手机

预期结果:

正常

实际结果:

白屏报错

bug描述:

报错reportJSException >>>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->Uncaught Error: java.lang.IllegalArgumentException: field uts.sdk.modules.myPlugin.MyApiOptionsJSONObject.data has type io.dcloud.uts.Map, got java.util.LinkedHashMap

更多关于uni-app uts插件编译到安卓 Map类型的参数报错field xxx has type io.dcloud.uts.Map got java.util.LinkedHashMap的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

uni-app 环境下不支持传递map 类型,修改为type类型 参考这个示例 https://gitcode.com/dcloud/hello-uts/blob/dev/uni_modules/uts-helloworld/utssdk/index.uts

更多关于uni-app uts插件编译到安卓 Map类型的参数报错field xxx has type io.dcloud.uts.Map got java.util.LinkedHashMap的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个错误是由于UTS插件在Android平台上的类型映射问题导致的。在Android环境中,UTS的Map类型实际上会被映射为io.dcloud.uts.Map,但JavaScript中的Map对象在原生层被转换成了java.util.LinkedHashMap,导致类型不匹配。

解决方案:

  1. 修改类型定义:将Map类型改为UTS支持的Object类型
export type MyApiOptions = {
    data: Record<string, any>  // 使用Record或Object替代Map
    success?: (res: MyApiResult) => void
    fail?: (res: MyApiFail) => void
    complete?: (res: any) => void
}
  1. 修改调用代码
import {myApi} from '@/uni_modules/my-plugin'  

// 使用普通对象替代Map
const dataObj = {}
myApi({
    data: dataObj
})
回到顶部