【问题标题】:How to fix `cannot be cast to java.lang.String` in RN?如何修复 RN 中的“无法转换为 java.lang.String”?
【发布时间】:2018-11-16 10:51:43
【问题描述】:

我在 Android 中的 RN 应用程序中遇到了这个错误:

06-06 16:37:54.455 7506-7569/system_process E/AudioTrack: 不能 获取会话 729 的音频输出,流类型 -1,用法 13,示例 速率 48000,格式 0x1,通道掩码 0x3,标志 0x4 06-06 16:37:54.455 7506-7569/system_process E/SoundPool:创建 AudioTrack 06-06 时出错 16:37:54.924 1286-1286/? E/EGL_emulation:tid 1286: eglCreateSyncKHR(1669): 错误 0x3004 (EGL_BAD_ATTRIBUTE) 06-06 16:37:55.190 11821-11894/com.efiat_rn E/unknown:ReactNative: 异常 在本地通话中 java.lang.ClassCastException:com.facebook.react.bridge.ReadableNativeMap 无法转换为 java.lang.String 在 com.facebook.react.bridge.ReadableNativeMap.getString(ReadableNativeMap.java:168) 在 com.facebook.react.modules.dialog.DialogModule.showAlert(DialogModule.java:232) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372) 在 com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160) 在 com.facebook.react.bridge.queue.NativeRunnable.run(本机方法) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29) 在 android.os.Looper.loop(Looper.java:154) 在 com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192) 在 java.lang.Thread.run(Thread.java:761) 06-06 16:37:55.191 11821-11894/com.efiat_rn E/unknown:ReactNative: 本机异常 称呼 java.lang.ClassCastException:com.facebook.react.bridge.ReadableNativeMap 无法转换为 java.lang.String 在 com.facebook.react.bridge.ReadableNativeMap.getString(ReadableNativeMap.java:168) 在 com.facebook.react.modules.dialog.DialogModule.showAlert(DialogModule.java:232) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372) 在 com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160) 在 com.facebook.react.bridge.queue.NativeRunnable.run(本机方法) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:29) 在 android.os.Looper.loop(Looper.java:154) 在 com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:192) 在 java.lang.Thread.run(Thread.java:761)

它在 iOS 版本上运行良好。它不会告诉我我做错了哪个 JS。我不知道如何解决它。当我启动应用程序时它会提示,当我关闭错误消息时,我可以看到一个半加载的应用程序,但不能点击。关于如何开始调试有什么想法吗?谢谢。

【问题讨论】:

  • 这方面有什么更新吗?你能调试这个吗?

标签: java android react-native


【解决方案1】:

在 ReactNative 中,您正在调用需要字符串参数的本机桥的方法。但是您实际发送的是 JsonObject。

例子,

const data = {message: "hello"};   // Consider this as your data

如果你把它发送到网桥,它会创建一个 NativeArray 并将它发送到原生层(但是你的层的方法需要字符串)。

现在您必须将对象转换为字符串并将其发送到本机层

const strData = JSON.stringify(data);

现在将 strData 发送到本机层

(如果您需要更多详细信息,请在下方评论,或者您可以告诉您的错误 更清楚地得到一些明确的答案)

【讨论】:

  • 我明白了。我想提供更多详细信息,但在错误消息中,我不知道哪个文件或哪一行,甚至没有任何提示来找出代码的哪个位置出错。
  • 你能把你的NativeLayer(你写的Java类)贴在Android端吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多