React Native中传给android的ReadableArray如何放入Map中?
我想用
//params是React Native通过函数传递给android中的函数的参数ReadableArray
WritableMap map = Arguments.createMap()
map.putArray("key", params);
但是这样总是报错null illegal type provided
有什么解决方法吗?
回复
1个回答

test
2024-06-29
WritableMap 只支持存放:
- null
- Boolean
- Number
- String
- WritableArray
- WritableMap
这几种类型。
所以你需要把 ReadableArray 先转成 WritableArray,才能放入 WritableMap 中。
先自己定义一个转换方法(以下是一种比较通用的转换方法,如果你只想针对某个特定的 ReadableArray,你也可以自己实现):
private static WritableMap convertMap(ReadableMap map) {
WritableMap temp = Arguments.createMap();
temp.merge(map);
return temp;
}
private static WritableArray convertArray(ReadableArray array) {
WritableArray temp = Arguments.createArray();
for (int i = 0; i < array.size(); i++) {
ReadableType type = array.getType(i);
switch (type) {
case Null:
temp.pushNull();
break;
case Boolean:
temp.pushBoolean(array.getBoolean(i));
break;
case Number:
temp.pushDouble(array.getDouble(i));
break;
case String:
temp.pushString(array.getString(i));
break;
case Array:
temp.pushArray(convertArray(array.getArray(i)));
break;
case Map:
temp.pushMap(convertMap(array.getMap(i)));
break;
default:
throw new Exception("Illegal type provided");
}
}
return temp;
}
然后再写入:
map.putArray("key", convertArray(params));
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容