2017-02-01 3 views
0

私はbytearrayオブジェクトをPromise経由で反応ネイティブのJavascriptに渡そうとしています。Javaから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) { 

     } 
    }) 

例外:

致命的な例外:メイン プロセス: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 (HttpModule.java:76) at com.example.creosdk.HttpModule $ 1.onResponse(HttpModule.java:76) at com.creo.fuel.uttp.http.toolbox.RawRequest.deliverResponse(RawRequest.java:46) at com.creo.fuel.uttp.http.toolbox.RawRequest.deliverResponse(RawRequest.java:16) at 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)) at java .lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java: 959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

+0

あなたは試してみて、それがbase64文字列としてエンコード送ってもらえますか?ブリッジは、JS相当の型を持つオブジェクトのみを渡すことができます。 – yedidyak

+0

あなたはそれを解決することができましたか?私は同じことを達成したい。 – Mj1992

答えて

1

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 
    } 
}; 
関連する問題