华途前端
华途前端
  • 发布:2023-09-01 19:54
  • 更新:2023-09-01 20:32
  • 阅读:232

【报Bug】 更新后 kotlin.Array 不能作为方法参数类型的声明使用,导致编译失败

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 22H2

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

手机系统: Android

手机系统版本号: Android 12

手机厂商: 华为

手机机型: 全部

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
/// <reference path="android-declarations.d.ts"/>  
import ExportUtils from "com.arashivision.sdkmedia.export.ExportUtils";  
import ExportImageParamsBuilder from 'com.arashivision.sdkmedia.export.ExportImageParamsBuilder';  
import IExportCallback from 'com.arashivision.sdkmedia.export.IExportCallback';  
import WorkWrapper from 'com.arashivision.sdkmedia.work.WorkWrapper'  
import InstaMediaSDK from 'com.arashivision.sdkmedia.InstaMediaSDK';  
import InstaCameraSDK from 'com.arashivision.sdkcamera.InstaCameraSDK';  
import InstaCameraManager from 'com.arashivision.sdkcamera.camera.InstaCameraManager';  
import ICaptureStatusListener from 'com.arashivision.sdkcamera.camera.callback.ICaptureStatusListener'  

import { UTSAndroid } from "io.dcloud.uts";  
import Application from 'android.app.Application';  
class MyICaptureStatusListener implements ICaptureStatusListener {  
    savePath : String;  
    cb : UTSCallback;  
    errorCb : UTSCallback;  

    constructor(savePath : String, cb : UTSCallback, errorCb : UTSCallback) {  
        this.savePath = savePath;  
        this.cb = cb;  
        this.errorCb = errorCb;  
    }  
    override onCaptureWorking() : void { };  
    override onCaptureTimeChanged(param0 : Long) : void { };  
    override onCaptureCountChanged(param0 : Int) : void {  
        console.log('has-Count', param0)  
    };  
    override onCaptureStopping() : void {  
        console.log('has-stop')  
    };  
    override onCaptureStarting() : void { };  
        override onCaptureFinish(param0?: kotlin.Array<string>) : void {  
        if (param0 === null) {  
            this.errorCb({ msg: '拍照数据异常,请重试' });  
        } else {  
            exportPanorama(this.savePath, param0, this.cb, this.errorCb)  
        }  
        InstaCameraManager.getInstance().setCaptureStatusListener(null);  
    };  
}

操作步骤:

如上述

预期结果:

编译成功

实际结果:

error: 'onCaptureFinish' overrides nothing‌
18:40:23.731 at uni_modules/huatu-360camera/utssdk/app-android/index.uts:144:1
18:40:23.740 142| };
18:40:23.740 143| override onCaptureStarting() : void { };
18:40:23.748 144| override onCaptureFinish(param0?: Array<string> ) : void {
18:40:23.752 | ^
18:40:23.759 145| if (param0 === null) {
18:40:23.759 146| this.errorCb({ msg: '拍照数据异常,请重试' });

bug描述:

云端打包不成功,报错为第三方uts类型异常,排查后发现更新后 onCaptureFinish 不能使用 kotlin.Array<string> 声明参数类(以前可以)

关键问题是我需要 override;因此不能在方法内部进行转换 只能在参数表中声明专有类型。
使用kotlin.Array<string>无法编译成功 使用Array<string>无法重写成功

尝试使用按照提示 专有类型引入

类似此处所说 文档 某些系统API或三方原生SDK的入参或返回值强制指定了kotlin的原生数组类型 但我不能在方法内部声明 只能在参数处声明时,应该怎么办?

2023-09-01 19:54 负责人:无 分享
已邀请:
DCloud_Android_DQQ

DCloud_Android_DQQ

继承原生数据类型是,依然遵循kotlin 原生类型的原则

你现在的问题 应该是需要确认 ICaptureStatusListener 声明的 onCaptureFinish 的参数类型是否是 Kotlin.Array.

可以贴一下编译后的kotlin 代码

  • 华途前端 (作者)

    现在问题是编译不通过 声明类型为Kotlin.Array 编译不通过

    2023-09-01 21:54

  • 华途前端 (作者)

    您的说法是对的 但是使用Kotlin.Array声明参数的话 编译报错 error: Unresolved reference: Kotlin‌

    2023-09-01 21:57

  • DCloud_Android_DQQ

    回复 d***@huatugz.com: 你私信我QQ。 发一下示例代码给我吧

    2023-09-02 12:42

  • 华途前端 (作者)

    回复 DCloud_Android_DQQ: 不需要什么示例啊 就是需要复写接口 如何在方法中声明 androidNative.Array 或者 Kotlin.Array, QQ 已私信

    2023-09-04 11:18

  • 华途前端 (作者)

    回复 DCloud_Android_DQQ: https://uniapp.dcloud.net.cn/plugin/uts-for-android.html#%E4%B8%BE%E4%BE%8B%E4%B8%89-string 我遇到的情况与文档此处描述的一致 但是按照文档指使去写 直接报错 HbuilderX3.8.12

    2023-09-04 14:44

  • DCloud_Android_DQQ

    回复 华途前端: 加你了

    2023-09-04 19:44

该问题目前已经被锁定, 无法添加新回复