使用自定义对象

时间:2018-08-14 13:05:29

标签: android reactjs react-native

我有一个与Android这样通信的react native组件-

我的React Native代码-

const myModule = NativeModules.MyProcessor;

myModule.processData(obj1, obj2);

我在MyProcessor.java中的Android代码是-

@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中使用这两个对象?

2 个答案:

答案 0 :(得分:1)

问题:

  

如何在Java中使用这两个对象Object1和Object2?

答案:引自here

  

“使用@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...

答案 1 :(得分:0)

如果要将复杂的对象从React-Native传递到Android,则应使用ReadableMap,它在JavaScript桥中使用,等效于HashMap

ReadableMap obj1

然后,您可以将其转换为HashMap并轻松获取值

HashMap map = (HashMap) obj1;
String field = map.get("key").toString();

对于您提供的具体值:

从obj1获取data1作为另一个HashMap:

HashMap details = (HashMap) map.get("details");

从详细信息图中读取字符串:

String detailId = details.get("detailId").toString();