React Native,“不能用作本机方法参数”

vohkndzv  于 2022-11-17  发布在  React
关注(0)|答案(3)|浏览(163)

我是ReactNative的新手。在开发本机模块时,我遇到了回调问题。下面是来自ReactNative的错误消息

02-05 17:43:26.387 32301-32570/com.awesomeproject2 E/ReactNativeJNI: Got JS Exception: Exception calling object as function: abc,function f1() {
                                                                               _ToastExample2.default.show('1111', _ToastExample2.default.SHORT);
                                                                             },72,73 is not usable as a native method argument (<unknown file>:1845)
02-05 17:43:26.387 32301-32570/com.awesomeproject2 E/ReactNativeJNI: Got JS Stack: invariant@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:1838:26
                                                                     enqueueNativeCall@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:2259:20
                                                                     fn@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:1999:40
                                                                     onBtnPress@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:58362:32
                                                                     proxiedMethod@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:34324:37
                                                                     proxiedMethod@[native code]
                                                                     touchableHandlePress@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:37170:47
                                                                     touchableHandlePress@[native code]
                                                                     _performSideEffectsForTransition@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:36821:36
                                                                     _performSideEffectsForTransition@[native code]
                                                                     _receiveSignal@http://localhost:8081/index.delta?platform=android&dev=true&minify=false:36754:46
                                                                     _receiveSignal@[native code]
                                                                     touchableHandleResponderRelease@http://localhost:8081/index.delta?platform=android&dev=true&
02-05 17:43:26.393 32301-32570/com.awesomeproject2 E/unknown:ReactNative: Exception in native call
                                                                          java.lang.RuntimeException: Error calling RCTEventEmitter.receiveTouches
                                                                              at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
                                                                              at android.os.Handler.handleCallback(Handler.java:739)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
                                                                              at android.os.Looper.loop(Looper.java:135)
                                                                              at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:194)
                                                                              at java.lang.Thread.run(Thread.java:818)
                                                                           Caused by: com.facebook.jni.CppException: Exception calling object as function: abc,function f1() {
                                                                                    _ToastExample2.default.show('1111', _ToastExample2.default.SHORT);
                                                                                  },72,73 is not usable as a native method argument (<unknown file>:1845)
                                                                            ... 7 more

我的原生模块看起来像这样

@ReactMethod
public void testCallback(String message, Callback c1, Callback c2, Callback c3) {
    if (message.equals("123")) {
        c1.invoke(message);
    } else if (message.equals("abc")) {
        c2.invoke(message);
    } else {
        c3.invoke(message);
    }
}

我的react调用函数

onBtnPress() {

  function f1 () {
    ToastExample.show('1111', ToastExample.SHORT);
  };

  function f2 () {
    ToastExample.show('2222', ToastExample.SHORT);
  };

  function f3 () {
    ToastExample.show('3333', ToastExample.SHORT);
  };

  ToastExample.testCallback('abc', f1, f2, f3);
}

我不知道为什么会发生这个错误,有人能帮助我吗?谢谢。

1mrurvl1

1mrurvl11#

我有3个回调的相同异常。如果你使用一个或两个回调,它工作正常
@ReactMethod public void testCallback(字符串消息,回调c1,回调c2)
工场

ipakzgxi

ipakzgxi2#

我在将Axios与formData字段一起使用时遇到了这个问题,而没有将附加的数据转换为字符串格式。
给出错误:

const formData = new FormData();
formData.append(<field_name>, field_data);

格式必须为:

const formData = new FormData();
formData.append(<field_name>, JSON.stringify(field_data));
qlfbtfca

qlfbtfca3#

当你传递一些不合适的信息给属性时,就会出现这种错误。例如,我没有传递准确的格式给ImageURI属性,因为它抛出了错误。这个错误很大程度上就是它本身的指示。
好吧,我知道了

<Image source = {{ uri: 'https://reactnative.dev/img/tiny_logo.png'}}>

但当你做这样的事时

<Image source = {{ uri: '<NaN'}}>

大多数情况下,当您从API获得错误的数据格式时,就会发生这种情况。
我的答案不适合这个特定的问题,但为了找出确切的标题,我已经登陆这个链接不同的时间,所以为了保存别人的时间,我想在这里张贴这个答案。

相关问题