首页 > 解决方案 > 使用自定义对象在 React native 和 android 之间进行 React Native 通信

问题描述

我有一个像这样与 Android 通信的本机组件 -

我的 React Native 代码——

const myModule = NativeModules.MyProcessor;

myModule.processData(obj1, obj2);

我的Android代码MyProcessor.java是-

@ReactMethod
    public void processData(final Object1 obj1, final Objet2 obj2) {
        //Do something here
    }

我的对象数据看起来像 -

"data1": {
                "id": "1",
                "name": "john",
                "key": "xxxxxxxx"
            },
            "details": {
                "detailId": "2",
                "detailName": "peter",
                "counter": 1
            }

我得到了 2 个对象 data1 和详细信息,我需要这两个对象和 detailId。

我的问题是如何在我的 java 中使用这两个对象?

标签: androidreactjsreact-native

解决方案


问题:

如何在我的 java 中使用这两个对象 Object1 和 Object2?

答:引用自这里

“使用 @ReactMethod 注释的方法支持以下参数类型,它们直接映射到它们的 JavaScript 等效项”

Boolean -> Bool
Integer -> Number
Double -> Number
Float -> Number
String -> String
Callback -> function
ReadableMap -> Object
ReadableArray -> Array

React Native 正在将 javascript 对象转换为ReadableMap.

因此,您应该实现这样的方法,而不是期望Object在本机模块中出现:

@ReactMethod
public void processData(final ReadableMap obj1, final ReadableMap obj2) {
    // Parse the ReadableMap using the available interface methods
}

这些是ReadableMap接口中可用的方法:Source

public interface ReadableMap {

  boolean hasKey(String name);
  boolean isNull(String name);
  boolean getBoolean(String name);
  double getDouble(String name);
  int getInt(String name);
  String getString(String name);
  ReadableArray getArray(String name);
  ReadableMap getMap(String name);
  Dynamic getDynamic(String name);
  ReadableType getType(String name);
  ReadableMapKeySetIterator keySetIterator();
  HashMap<String, Object> toHashMap();
}

更新

按照您发布的示例对象,您可以像这样解析数据:

ReadableMap data1 = obj1.getMap("data1");
String id = data1.getString("id");
String name = data1.getString("name");
// And so on...

ReadableMap details = obj1.getMap("details");
String detailId = details.getString("detailId");
int counter = details.getInt("counter");
// And so on...

推荐阅读