JasonLGY
JasonLGY
  • 发布:2025-02-01 21:20
  • 更新:2025-02-01 21:20
  • 阅读:122

求助uni-app x 类型定义不匹配,试过很多写法都不行

分类:uni-app x

求助uni-app x 类型定义不匹配,试过很多写法都不行

背景,代码片段节选,如果情况2所有行注释,情况1生效,结果正确✅

如果情况1所有行注释,情况2生效,结果在安卓端运行报错:代码中console.log位置日志如下

12:15:44.351 App Launch at App.uvue:5
12:15:44.351 App Show at App.uvue:8
12:15:44.351 -----1类型this.tableData: object at pages/myInfo/myInfo.uvue:81
12:15:44.351 -----2类型json2: string at pages/myInfo/myInfo.uvue:85
12:15:44.351 -----3类型this.tableData: string at pages/myInfo/myInfo.uvue:87
12:15:44.351 -----4this.tableData: "[ { \"name\": \"名字1\", \"accountnum\": \"1111111\" },{ \"name\": \"名字2\", \"accountnum\": \"2222222\" } ]" at pages/myInfo/myInfo.uvue:88

12:15:45.171 获取数据失败: ‍[⁠java.lang.NullPointerException⁠]‍ {cause: null, message: "null cannot be cast to non-null type io.dcloud.uts.UTSArray<uni.UNI3CDFEA6.objType>"} at pages/myInfo/myInfo.uvue:93
12:15:45.171 应用启动到触发onLaunch耗时: 232ms
12:15:45.172 进入页面:​/pages/myInfo/myInfo​ 。[{"创建dom元素个数":"12个","耗时":"6ms"},{"排版":"1次","耗时":"10ms"},{"渲染":"1次","耗时":"21ms"},{"跳转页面到onReady总耗时":"198ms"}]

试过其他帖子回复的方法也不行:*已解决,先转字符串,再转类型

this.purchaseOrderList = JSON.parse<PurchaseOrderType[]>(JSON.stringify(res['data'])) *

主要代码摘选:

<template>  
  <view class="content">  
      <view class="uni-container">  
        <scroll-view scroll-y class="table">  
                    <view class="table-header">  
                          <text class="header-cell">账号</text>  
                          <text class="header-cell">名称</text>  
                    </view>  
          <list-view>  
              <list-item class="table-row" v-for="(item, index) in tableData" :key="index">  
                <text class="item">{{ item.accountnum }}</text>  
                <text class="item">{{ item.name }}</text>  
              </list-item>  
                 </list-view>  
        </scroll-view>  

      </view>  
</template>  

<script>  
type objType = {  
  accountnum : string,  
  name : string  
}  

export default {  
  data() {  
    return {  
情况1:    tableData: [] as objType[] ,  
情况2:  // tableData:[ {  "name": "名字1",       "accountnum": "1111111"  },{        "name": "名字2",          "accountnum": "2222222"  }    ] as objType[] , // 修复类型定义  
            loading: false  
               };  
              },  
onLoad() {  
    this.getData(1) ;  
  },  
  methods: {  
   async getData(pageCurrent:number) {  
       try {  
情况1:    console.log('-----1类型this.tableData:',typeof this.tableData);  
情况1:    this.loading = true;  
情况1:    this.pageCurrent = pageCurrent;  
情况1:    const json2 = '[ {  "name": "名字1",       "accountnum": "1111111"  },{        "name": "名字2",          "accountnum": "2222222"  }    ]';  
情况1:    console.log('-----2类型json2:',typeof json2);  
情况1:    const json3 = JSON.stringify(json2);  
情况1:    console.log('-----3类型this.tableData:',typeof json3);  
情况1:    console.log('-----4this.tableData:',json3);  
情况1:    this.tableData = JSON.parse<objType[]>(json3) as objType[] ;  
        this.loading = false;  
       } catch (error) {  
        //TODO handle the exception  
        console.error('获取数据失败:', error);  
        this.loading = false;  
       }  
   }  
  }  
};  
</script>

总结下来问题就是,应该是数据类型不匹配的问题, 只要启用了情况2行的代码,在安卓端运行报错22:03:58.683 获取数据失败: ‍[⁠java.lang.NullPointerException⁠]‍ {cause: null, message: "null cannot be cast to non-null type io.dcloud.uts.UTSArray<uni.UNI3CDFEA6.objType>"} at pages/myInfo/myInfo.uvue:94
这边代码生效没问题才能替换代码,从数据库取数据。 截图能显示出来是因为代码是在data() {
return 给的默认值。 不知道咋能转成一样的。

2025-02-01 21:20 负责人:无 分享
已邀请:

要回复问题请先登录注册