如何将数据从 Android 原生 - Kotlin 传递到 React Native?

Sir*_*mra 2 android kotlin react-native

我是 Android 中 React Native 集成的新手。我正在创建一个聊天应用程序,为此需要在我的 React Native 组件中传递 UserId 和另一个用户信息。我如何从 Android Native 传递它?我进行了搜索,但没有找到任何成功的线索。我尝试使用 SharedPreference 来完成此操作,但不知道如何在 React Native 中提取共享首选项持有者。还有其他方法可以提取此信息吗?

我在ReactActivity中创建了ReactRootView并在其中集成了ReactInstanceManager。

根据 Geng 和 Cool7 的回答,我已经实现了 Android Kotlin 代码,如下所示:

val map = Arguments.createMap()
    map.putString("user_id", "Value1")
    try {
        mReactInstanceManager?.currentReactContext
                ?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
                ?.emit("userEventMap", map)
    } catch (e: Exception) {
        Log.d("ChatActivity", "DeviceEventEmitter Caught Exception: " + e.printStackTrace())
    }
Run Code Online (Sandbox Code Playgroud)

我的 React 本机代码提取它如下:

componentWillMount() {
console.log("UserId Emission");
DeviceEventEmitter.addListener("userEventMap", function() {
  console.log("UserId Emission inside");
  console.log("UserId :: ", e.user_id);
});
Run Code Online (Sandbox Code Playgroud)

}

我也尝试过 Cool7 的同上代码,也像上面一样。但是 UserId Emission 正在打印,但内部日志没有打印。该发射器中未监听地图。

提前致谢。

Coo*_*ol7 5

从 android 发送数据以响应本机:

从 Android 端通过以下方式发出您的事件(通知或广播):

    public class MainActivity extends ReactActivity {

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

        WritableMap map = Arguments.createMap();
        map.putString("key1", "Value1");
   map.putString("key1", "Value1");

        try {
          getReactInstanceManager().getCurrentReactContext()
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit("customEventName", map);
        } catch (Exception e){
          Log.e("ReactNative", "Caught Exception: " + e.getMessage());
        }
    }
Run Code Online (Sandbox Code Playgroud)

在反应组件中 addEventListner(subscribe) 该事件,如下所示:

import { DeviceEventEmitter } from 'react-native';

componentWillMount: function() {
  DeviceEventEmitter.addListener('customEventName', function(e: Event) {
    // handle event.
  });
Run Code Online (Sandbox Code Playgroud)

}

另请参阅

从 android 本机发送数据以响应本机