如何修复`不能在RN中强制转换为java.lang.String`?

时间:2018-06-06 16:53:45

标签: java android react-native

我在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中           at com.facebook.react.bridge.ReadableNativeMap.getString(ReadableNativeMap.java:168)           在com.facebook.react.modules.dialog.DialogModule.showAlert(DialogModule.java:232)           at java.lang.reflect.Method.invoke(Native Method)           在com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)           在com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)           at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)           在android.os.Handler.handleCallback(Handler.java:751)           在android.os.Handler.dispatchMessage(Handler.java:95)           at 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)           at 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中           at com.facebook.react.bridge.ReadableNativeMap.getString(ReadableNativeMap.java:168)           在com.facebook.react.modules.dialog.DialogModule.showAlert(DialogModule.java:232)           at java.lang.reflect.Method.invoke(Native Method)           在com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)           在com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:160)           at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)           在android.os.Handler.handleCallback(Handler.java:751)           在android.os.Handler.dispatchMessage(Handler.java:95)           at 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我做错了。我对如何修复它没有任何线索或想法。它在我启动应用程序时提示,当我关闭错误消息时,我可以看到半载应用程序,但不能点击。关于如何开始调试有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:5)

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

实施例,

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

如果你将它发送到网桥,它将创建一个NativeArray并将其发送到本机层(但你的图层方法需要String)。

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

const strData = JSON.stringify(data);

现在将strData发送到本机层

  

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