@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

我得到两个对象data1和details,我需要这两个对象和detailId。

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

3 个评论
这些对象已经准备好供你使用了,作为参数传递。我无法理解你说的我如何使用这些对象是什么意思。
我需要一个parcelable或其他的东西,以便java能理解它。
@Julia 检查我的答案。这正是你需要的。
android
reactjs
react-native
user9765778
发布于 2018-08-14
3 个回答
HedeH
HedeH
发布于 2022-04-24
已采纳
0 人赞同

Question:

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

答案是。 Quoted from 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...
    
Faruk Yazici
Faruk Yazici
发布于 2022-04-24
0 人赞同

如果你想从React-Native向Android传递复杂的对象,你应该使用ReadableMap,它用于JavaScript桥,相当于一个HashMap

ReadableMap obj1

然后,你可以将其转换为一个HashMap,并轻松地获得数值。

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

对于你提供的具体数值。

从obj1中获取数据1作为另一个HashMap。

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

从细节地图中读取字符串。

String detailId = details.get("detailId").toString();
    
为什么要投给HashMap?这就是ReadableMap接口的作用......
@HedeH ReadableMap是为React Native实现的,它以前在Java中并不存在。例如,如果你要把这个对象传递给另一个页面,你需要从react bridge包中导入另一个对象来使用它。我习惯性地把它转为HashMap,以便在每个页面上使用Java的标准util对象。正如我所说,这只是编码惯例,由你决定。
很公平,但这个问题是关于React Native的。而React Native有它的惯例。在为AndroidSystem.out.println()开发时,你会使用Log.d()吗?当然Log.d()....
Quick learner
Quick learner
发布于 2022-04-24
0 人赞同

从 react native 发送地图或对象到 android native

 const yourMap = { "param1": "value1",
        "param2": "value2",
        const strValue = "hello";
        MainModule.methodName(strValue, yourMap)

在安卓端接收

 @ReactMethod
    fun methodName(
        strValue: String,
        info: ReadableMap,
        promise: Promise
        mPickerPromise = promise
        var hashmap = Utils.toHashMap(info)
        // do your stuff here

Where Utils.toHashMap()

fun toHashMap(map: ReadableMap?): HashMap<String, Any?> {
    val hashMap: HashMap<String, Any?> = HashMap()
    val iterator = map!!.keySetIterator()
    while (iterator.hasNextKey()) {
        val key = iterator.nextKey()
        when (map.getType(key)) {
            ReadableType.Null -> hashMap[key] = null
            ReadableType.Boolean -> hashMap[key] = map.getBoolean(key)
            ReadableType.Number -> hashMap[key] = map.getDouble(key)
            ReadableType.String -> hashMap[key] = map.getString(key)
            ReadableType.Map -> hashMap[key] = toHashMap(map.getMap(key))
            else -> throw IllegalArgumentException("Could not convert object with key: $key.")