以前只是用intent传递一些简单的值,最近传递list集合时发现值总是传不过去,logcat报如下错误
说的是不能处理值为null的情况,回过头看list集合时确实发现有value为null的key,这样问题就简单了,把value为null的
key给移除就可以了。
ArrayList<Map<String, Object>> list=new ArrayList<Map<String,Object>>();//list为要传递的集合
Map<String, Object> temMap = list.get(0);
List<String> keys=new ArrayList<String>(temMap.keySet());
for(String key:keys){
Object value=temMap.get(key);
if(value.equals(null)){
temMap.remove(key);
}
}
intent.putExtra("data", list);
// intent.putParcelableArrayListExtra("data", (ArrayList<? extends Parcelable>) list);
这样处理之后list集合就可以成功传递了。
最后顺便说下intent传递list集合的两种方法
一、用intent.putExtra("data", list)形式,查看源码可以发现ArrayList是实现了Serializable这个接口的
取值的时候用intent.getSerializableExtra("data")就可以了。
二、用intent.putParcelableArrayListExtra("data", (ArrayList<? extends Parcelable>) list)这用形式。
取值的时候用如下方式:
List<? extends Parcelable> temlist = (ArrayList<? extends Parcelable>)intent.getParcelableArrayListExtra("data");
List<Map<String, Object>> list=(List<Map<String, Object>>) temlist;
总的来说第二种方法过于繁琐,推荐使用第一种。