将数据从 Android 活动发送到 React Native

2023-11-27

我正在本机 android 活动中处理意图,并希望将意图中获得的数据发送到本机反应部分。请原谅我糟糕的术语/解释——在 Android 开发方面我是一个完全的初学者。

我尝试遵循本指南:https://facebook.github.io/react-native/docs/native-modules-android.html#sending-events-to-javascript,但我陷入了获取主要反应上下文的困境。因此,意图来自应用程序之外,我想获取意图数据并启动应用程序。例如。主视图应该只显示意图中的文本。

这就是我发送事件的方式:

public class CustomActivity extends ReactActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    WritableMap map = Arguments.createMap();
    map.putString("messageString", "CustomMessage");

    try {
      getReactInstanceManager().getCurrentReactContext()
        .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
        .emit("customEvent", map);
    } catch (Exception e){
      Log.e("ReactNative", "Caught Exception: " + e.getMessage());
    }
}

这会引发异常

捕获异常:尝试调用虚拟方法 'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)' 在空对象引用上

我没有为活动定义自定义布局,并且想使用主应用程序的上下文。


我在生产中遇到了一些

    Fatal Exception: java.lang.RuntimeException
            Unable to resume activity {minibar.android/minibar.android.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)' on a null object reference
    Caused by java.lang.NullPointerException
            Attempt to invoke virtual method 'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)' on a null object reference

所以解决方案是检查是否reactContext不为空,否则创建侦听器并等待它:

ReactInstanceManager reactInstanceManager = getReactNativeHost().getReactInstanceManager();
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if(reactContext != null) {
    reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
        .emit("url", params);
} else {
    reactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
        @Override
        public void onReactContextInitialized(ReactContext context) {
            context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit("url", params);
            reactInstanceManager.removeReactInstanceEventListener(this);
        }
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将数据从 Android 活动发送到 React Native 的相关文章