我有一个与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中使用这两个对象?
答案 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();