React Native中传给android的ReadableArray如何放入Map中?

我想用

//params是React Native通过函数传递给android中的函数的参数ReadableArray
WritableMap map = Arguments.createMap()
map.putArray("key", params);

但是这样总是报错null illegal type provided
有什么解决方法吗?

阅读 2.7k
1 个回答

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));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏