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

Shu*_*nda 5 react-native

我试图通过 Promise 将 bytearray 对象传递给 React - Native 中的 Javascript。

代码:

  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) {

        }
    })
Run Code Online (Sandbox Code Playgroud)

例外:

致命异常:主进程:com.listviewdbproject,PID:5965 java.lang.RuntimeException:无法转换类型类的参数 [B at com.facebook.react.bridge.Arguments.fromJavaArgs(Arguments.java:57) at com.facebook .react.bridge.CallbackImpl.invoke(CallbackImpl.java:29) 在 com.facebook.react.bridge.PromiseImpl.resolve(PromiseImpl.java:32) 在 com.example.creosdk.HttpModule$1.onResponse(HttpModule.java: 80) 在 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$ResponseDeliveryRunnable.run(ExecutorDelivery.java:100) 在 android.os.Handler.handleCallback( Handler.java:815) 在 android.os.Handler.dispatchMessage(Handler.java:104) 在 android.os.Looper.loop(Looper.java:194) 在 android.app.ActivityThread.main(ActivityThread.java:5616) )在java.lang.reflect.Method.invoke(本机方法)在java.lang.reflect.Method.invoke(Method.java:372)在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java :959)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

Sri*_*amp 0

您无法直接解析 Array 和 ArrayList 数据结构。React Native 专门提供了WritableNativeArray实现这一点的功能。据我所知,它还没有在任何地方记录,但您可以在这里找到它。以下代码适用于我,您可以扩展它以满足您的要求:

@ReactMethod
public void sendArrays(Promise promise) {

    WritableArray arr = new WritableNativeArray();

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

    promise.resolve(arr);
}
Run Code Online (Sandbox Code Playgroud)

而在 JS 方面:

import { NativeModules } from 'react-native';

const { someNativeModule } = NativeModules;

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

    return response;
    } catch (err) {
    // handle errors
  }
};
Run Code Online (Sandbox Code Playgroud)