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

时间:2018-03-14 08:54:08

标签: android react-native kotlin

我是Android中React Native集成的新手。我正在创建一个聊天应用程序,并且需要在我的React Native组件中传递UserId和另一个用户信息。我怎样才能从Android Native传递它?我搜索了但是我还没有找到任何成功的领先优势。我尝试使用SharedPreference,但没有任何想法如何在React native中提取sharedpreference holder。有没有其他方法可以提取这些信息?

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

根据Geng's和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())
    }

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

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

}

我也尝试过Cool7&ditto代码,也像上面一样。但是UserId Emission正在打印,但内部日志却没有。在这个发射器中没有听到地图。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

在反应组件addEventListner(subscribe)中,如:

import { DeviceEventEmitter } from 'react-native';

componentWillMount: function() {
  DeviceEventEmitter.addListener('customEventName', function(e: Event) {
    // handle event.
  });

}

另请参阅

To send data from android native to react native

答案 1 :(得分:0)

请参阅https://facebook.github.io/react-native/docs/native-modules-android.html。基本上,您需要在本机代码中创建和注册模块,并从本机代码中调用它。