鑫时代
鑫时代
  • 发布:2025-05-13 17:58
  • 更新:2025-05-14 14:57
  • 阅读:142

uniapp-x编译Kotlin的问题,不懂Kotlin 求个解决办法

分类:uni-app x

具体问题可见插件
https://ext.dcloud.net.cn/plugin?id=23422

UTS代码

export async function xRequest<T>(instanceConfig: RequestOptions<any>): Promise<T>{  
    // #ifdef APP-ANDROID  
    //  解决Android泛型转换失败问题  
    //  如果把此处代码移入onSuccess回调中 Android编译会报错 不太清楚什么问题 等研究明白后更新  
    //  这样也可以正常使用  
    const v = await _xRequest<T>(instanceConfig) as UTSJSONObject;  
    return JSON.parse<T>(JSON.stringify(v)) as T;  
    // #endif  

    // #ifndef APP-ANDROID  
    return _xRequest<T>(instanceConfig);  
    // #endif  
}  

async function _xRequest<T>(instanceConfig: RequestOptions<any>): Promise<T>{  
return createXRequest<APIResponse>(  
        {...} as XBaseRequestOptions  
        , {  
            onRequest: function(config: RequestOptions<any>) {  
                ...  
            },  
            onRequestEnd: async function(response: RequestSuccess<APIResponse>) {  
                if(401 == response.statusCode){  
                    //  无权限/鉴权无效/鉴权过期  无感刷新Token  
                    await refreshToken();  
                    console.log('已刷新鉴权!');  
                    //  返回null 请求重试  
                    return null;  
                }  
                return 200 == response.statusCode;  
            },  
            onRequestError: function(error: IUniError, response: RequestSuccess<APIResponse> | null) {  
                ....  
            },  
            onRequestMonitor: function(response: APIResponse) {  
                .....  
            },  
            onRequestMonitorError: function(response: APIResponse) {  
                .....  
            },  
            onSuccess: function(response: APIResponse) {  
                return response.data as any | undefined;  
                               //return JSON.parse<T>(JSON.stringify(v)) as T;  
            }  
        } as XRequestOptions<APIResponse>  
        , instanceConfig  
    ) as Promise<T>  
}

如果将JSON.parse<T>(JSON.stringify(v)) as T 这句代码放在外层转换,在Android上运行正常

如果将这句代码移入onSuccess里,Android编译失败,报错见图

大佬们给看看,困扰好几天了

2025-05-13 17:58 负责人:无 分享
已邀请:
鑫时代

鑫时代 (作者)

顶一下

DCloud_UNI_FengXY

DCloud_UNI_FengXY

JSON.parse<T>(JSON.stringify(v)) as T 这一句代码需要将泛型实体化,这就导致编译器需要将整个方法编译为inline+reified函数,这种函数又会导致需要函数表达式编译为lambda,而lambda又会引发一些return语句的调整,上述的调整可能存在一些边界情况出现问题,稍后排查一下,看看如何解决

  • 鑫时代 (作者)

    感谢 alphav版修复请告知下

    2025-05-14 15:56

要回复问题请先登录注册