在React-native桥中将字节数组从java传递到JavaScript

kpbpu008  于 6个月前  发布在  React
关注(0)|答案(3)|浏览(102)

我试图通过Promise向react-native中的Javascript传递一个bytearray对象。

    • 产品代码:**
RawRequest request = new RawRequest(Request.Method.GET, path, new 

 ResponseListener<byte[]>() {

        @Override
        public void onResponse(byte[] bytes) {

           //Let's pass the response in the form of bytes
             promise.resolve(bytes);

    Log.d(TAG,"The response in bytes length is " + bytes.length);
        }

    }, new ErrorListener() {
        @Override
        public void onError(HttpError httpError) {

        }
    })

字符串

    • 异常:**

致命例外:主要工艺:com. listviewdbproject,PID:5965 java. lang. RuntimeException:无法在com. facebook. react. bridge. Arguments. fromJavaArgs转换类型class [B]的参数(Arguments.java:57)at com. facebook. react. bridge. CallbackImpl. invoke(CallbackImpl.java:29)在com. facebook. react. bridge. PromiseImpl. resolve(PromiseImpl.java:32)at com.example.creosdk.HttpModule$1.onResponse(HttpModule.java:80)at com.example.creosdk.HttpModule$1.onResponse(HttpModule.java:76),网址:com. creo. fuel. uttp. http. toolbox. RawRequest. deliverResponse(RawRequest.java:46)在com. creo. fuel. uttp. http. toolbox. RawRequest. deliverResponse(RawRequest.java:16)在com. creo. fuel. uttp. http. delivery. ExecutorDelivery $www.example.com(Execut ResponseDeliveryRunnable.run

sc4hvdpw

sc4hvdpw1#

你不能直接解析Array和ArrayList数据结构。React Native专门提供了WritableNativeArray来完成这一点。据我所知,它还没有在任何地方被文档化,但你可以找到它here。下面的代码对我来说是有效的,你可以扩展它以满足你的需求:

@ReactMethod
public void sendArrays(Promise promise) {

    WritableArray arr = new WritableNativeArray();

    arr.pushString("hello");
    arr.pushString("world");

    promise.resolve(arr);
}

字符串
在JS方面:

import { NativeModules } from 'react-native';

const { someNativeModule } = NativeModules;

const getArrays = async () => {
  try {
    const response = await someNativeModule.sendArrays();

    return response;
    } catch (err) {
    // handle errors
  }
};

6g8kf2rb

6g8kf2rb2#

这已经晚了很多年,但我也遇到了类似的问题。我的解决方案是在React-Native中创建一个字符串数组,其中包含字节值;即[“52”,“0”],并在原生部分中将其转换回字节数组。
我最初尝试使用字符串,但React-Native to Java桥从字符串中删除了尾随的null代码。

hmae6n7t

hmae6n7t3#

我也有同样的要求,最后把ByteArray转换成了base64字符串。在Kotlin中:

String(Base64.getEncoder().encode(myByteArray))

字符串
你可以通过桥将这个字符串发送到你的JavaScript,就像你发送任何其他字符串一样,并将其转换为JS Buffer:

const myBuffer = Buffer.from(myByteString, 'base64');

相关问题