You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native向原生模块传Uint8Array报错求助

解决React Native传递Uint8Array到Java原生模块的"Malformed calls from JS"错误

错误原因

该错误是JS与Java原生层参数序列化/反序列化不匹配导致的,通常是参数类型不兼容、参数数量不一致,或是缓存引发的映射异常。

解决步骤

  • 检查Java方法签名
    确保Java层方法接收的是byte[]类型,这是React Native默认映射Uint8Array的类型,不要使用ByteBuffer或其他非匹配类型:

    @ReactMethod
    public void handleByteArray(byte[] data) {
        // 你的处理逻辑
    }
    
  • 验证JS侧传递的数组
    确保传递的是标准Uint8Array,避免传递被修改过的嵌套数组或非完整TypedArray:

    const validUint8 = new Uint8Array([0x01, 0x02, 0x03]);
    YourNativeModule.handleByteArray(validUint8);
    
  • 核对参数数量一致性
    确认JS调用时的参数个数与Java方法的参数个数完全一致,不要多传或漏传参数。

  • 清理缓存并重新构建
    缓存异常可能导致类型映射错误,执行以下命令重置并重新编译:

    npx react-native start --reset-cache
    cd android && ./gradlew clean && ./gradlew assembleDebug
    
  • 大数组备选方案:Base64中转
    如果传递的数组过大,可先转成Base64字符串传递,Java层再解码:
    JS侧:

    const base64Str = btoa(String.fromCharCode(...validUint8));
    YourNativeModule.handleBase64(base64Str);
    

    Java侧:

    import android.util.Base64;
    
    @ReactMethod
    public void handleBase64(String base64) {
        byte[] data = Base64.decode(base64, Base64.DEFAULT);
        // 处理逻辑
    }
    

内容的提问来源于stack exchange,提问作者Nikita Plotnikov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:21