React Native,“不适用于本地方法参数”。

12

我是React Native的新手。在开发本地模块时,遇到了回调的问题。 以下是React Native的错误消息:

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);
}

我不知道为什么会出现这个错误,有人可以帮帮我吗?谢谢。

3个回答

0

我遇到了使用3个回调函数时出现相同的异常。如果只使用一个或两个回调函数,则可以正常工作。

@ReactMethod public void testCallback(String message, Callback c1, Callback c2)

可以正常工作。


1
这不是解决问题的方法,而是避免它的简单方式。 - hannad rehman
这可能是问题的解决方案,因为回调是JavaScript和Java之间通信的最基础的方式。这也可能是它的局限性。 - Raunaqss
为什么一开始要有3个回调函数?通常你会有一个成功和失败的回调函数,在本地模块中处理逻辑,然后返回成功或失败的回调函数。基于此,在React Native中进行处理。我知道这并没有回答问题,但这只是一个可能解决问题或给你灵感的提示。 - Aleksandar Zoric

0

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

会出现错误:

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

必须以以下形式呈现:

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

0

这种错误通常是由于向属性传递不恰当的内容所引起的。例如,我在传递图像URI属性时没有传递正确的格式,因此导致了错误的发生。这种错误的提示非常明显。

没错。

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

但是当你做类似这样的事情时。

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

大多数情况下,这是由于从API获取了错误的数据格式所导致的。
我的回答并不适用于这个特定的问题,但为了找到确切的标题,我已经多次访问了这个链接,所以为了节省其他人的时间,我想在这里发布这个答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接