Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么在使用Parcel#writeMap(地图)时地图键需要是字符串对象?_Android - Fatal编程技术网

Android 为什么在使用Parcel#writeMap(地图)时地图键需要是字符串对象?

Android 为什么在使用Parcel#writeMap(地图)时地图键需要是字符串对象?,android,Android,查看文档,它清楚地指出“映射键必须是字符串对象”,但是查看代码,除了完全不必要的强制转换之外,似乎完全没有理由这样做: /* package */ void readMapInternal(Map outVal, int N, ClassLoader loader) { while (N > 0) { Object key = readValue(loader); Object value = readValue(loader);

查看文档,它清楚地指出“映射键必须是字符串对象”,但是查看代码,除了完全不必要的强制转换之外,似乎完全没有理由这样做:

/* package */ void readMapInternal(Map outVal, int N,
    ClassLoader loader) {
    while (N > 0) {
        Object key = readValue(loader);
        Object value = readValue(loader);
        outVal.put(key, value);
        N--;
    }
}

/* package */ void writeMapInternal(Map<String,Object> val) {
    if (val == null) {
        writeInt(-1);
        return;
    }
    Set<Map.Entry<String,Object>> entries = val.entrySet();
    writeInt(entries.size());
    for (Map.Entry<String,Object> e : entries) {
        writeValue(e.getKey());
        writeValue(e.getValue());
    }
}
/*package*/void readMapInternal(映射outVal,int N,
类加载器(加载器){
而(N>0){
对象键=读取值(加载器);
对象值=读取值(加载器);
输出值(键、值);
N--;
}
}
/*包*/void writeMapInternal(映射值){
if(val==null){
写入(-1);
返回;
}
Set entries=val.entrySet();
writeInt(entries.size());
用于(地图条目e:条目){
writeValue(如getKey());
writeValue(如getValue());
}
}
这里有我遗漏的东西吗?知道这一点对我来说很重要,因为我正在编写一个大量使用这个类的库,它似乎是一个无缘无故的巨大限制

编辑:类似地,在编写SparseArray对象时,该类强制您 要仅传入SparseArray:

public最终无效写入parserray(SparseArray val)
这是另一个毫无意义的限制。这些是安卓API漏洞吗


编辑:答案似乎还暗示存在错误

,所以为什么不改用
writeBundle
?捆绑包还需要字符串键。对我来说,writeMap函数似乎在没有字符串键的情况下可以正常工作。您希望使用哪种类型的键(如果不是字符串)?我希望处理所有类型的可传递贴图。为了便于论证,假设键只是实现Parcelableso write
writeYourMap
helper方法的某个随机对象,该方法首先写入大小,然后在循环中写入一个键,后跟一个值,当然,您也应该写入
readYourMap
public final void writeSparseArray(SparseArray<Object> val)