Intent传递list集合时异常解决

以前只是用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;

总的来说第二种方法过于繁琐,推荐使用第一种。

时间: 2024-10-07 22:19:34

Intent传递list集合时异常解决的相关文章

使用Intent传递参数的问题

我在Fragment中使用Intent调用某一个Activity 同时传递Parcable对象,对象中存在List列表,列表中的对象也是Parcable的,当使用Intent传递该对象时,回报空指针异常. 而在线程间传递Parcable不会出现这些问题.当传递ArrayList<Parcable>列表时,会出现属性值丢失的问题,比如long的值的丢失问题.

通过Intent传递类对象

一.Intent是什么 1.定义 Intent被译作意图,其实还是很能传神的,Intent期望做到的,就是把实现者和调用者完全解耦,调用者专心将以意图描述清晰,发送出去,就可以梦想成真,达到目的. 这 个解释还是有点不太好理解,下面还有一个:Intent是一种运行时绑定(run-time binding)机制,它能在程序运行过程中连接两个不同的组件.通过Intent,你的程序可以向Android表达某种请求或者意愿,Android 会根据意愿的内容选择适当的组件来完成请求.比如,有一个Activ

解决spring 事务管理默认不支持SQLException等运行时异常

公司同事在定位一个bug时,发现spring默认的事务只支持运行时异常的回滚,对于像SQLException这样的非运行时异常,默认的事务机制不能处理,于是找了下解决的办法:    1.在捕获SQLException的时候,抛出一个RuntimeException及其子类,例如:     try {               xxx        } catch (Exception e) {               throw new ModuleException();       }

Intent传递简单对象与集合

我们在Intent传递传递对象,可以有三种方式,实现Serializable接口.实现Parcelable接口,使用json格式序列化与反序列化. 在此我们使用第二方式,现实Parcelable接口,实现Parcelable需要以下操作. 1.writeToParcel 方法:该方法将类的数据写入外部提供的Parcel中. 2.describeContents 方法:返回内容描述信息的资源ID. 3.静态的Parcelable.Creator接口,本接口有以下方法两方法: 3.1 createF

webservice传递特殊字符时的解决的方法

webservice soap报文是xml格式交互的,当中针对特殊字符传递无法解析,导致数据处理失败. 解决的方法例如以下: 1.在发送报文之前,针对报文进行base64转码,转义后避免报文中含有特殊字符. 标准base64中是以%开头的,假设存储到数据库中,并进行查询sql中,会解析成通配符,这样会报错. 搜索后使用改进版base64进行转码,能够规避该问题,详细度娘一下吧. 此方法的缺点是,全部client都须要知道解码的方式,否则无法解析. 2.在xml中,使用cdata标记特殊字符,这样

webservice传递特殊字符时的解决办法

webservice soap报文是xml格式交互的,其中针对特殊字符传递无法解析,导致数据处理失败. 解决办法如下: 1.在发送报文之前,针对报文进行base64转码,转义后避免报文中含有特殊字符. 标准base64中是以%开头的,如果存储到数据库中,并进行查询sql中,会解析成通配符,这样会报错. 搜索后使用改进版base64进行转码,可以规避该问题,具体度娘一下吧. 此方法的缺点是,所有客户端都需要知道解码的方式,否则无法解析. 2.在xml中,使用cdata标记特殊字符,这种方式经分析后

关于json解析时异常org.json.JSONException: A JSONObject text must begin with &#39;{&#39; at character 1 of ?{的解决方法

出现这个异常的原因是json串格式不正常,没有"{"开始或没有"}"结尾,仔细检查下json文件的格式一般就可以解决这个问题.但是有时候json文件是正常的,仍然有这个异常信息,怎么办呢,这个是因为你的json文件头里带有编码字符(如UTF-8等),读取字符串时json串是正常的,但是解析就有异常,一般会出现这样的情况是读取的json串是来自于服务器或本地的文件,文件头里自带编码,就我碰到情况来看在Android2.1的手机会报异常,高于2.1的手机是正常的. 解决

Activity之间使用intent传递大量数据带来问题总结

转载请注明:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity之间通过intent传递大量数据,导致新Activity无法启动. Activity之间数据传递方式总结參考 这 里. 比較经常使用的是直接利用intent传递,比方使用bundle.例如以下: Intent intent =new Intent(ActivityA.this,ActivityB.

Android开发经验之—intent传递大数据

在Activity或者组件之前传递信息时,一般采用intent绑定bundle的方式传值,但在使用过程中需要注意的是不要用bundle传递大容量数据: 在做项目的过程中,需要将听写界面的听写结果信息传递到听写记录界面供显示用,但是由于传递的数据量过大导致程序ANR,甚至直接报异常(传递的信息里面有bitmap转换成的byte数组.每一个词组的拼音.词语.语音信息),经过分析发现是由于bundle不能传递大容量的数据信息,在stackoverflow里面查阅发现有同行遇到类似的问题: (1)"Th