`
lzh20044178
  • 浏览: 2941 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

android用Intent传输自定对象数组(Parcelable[])失败

阅读更多
问题场景描述: 从远程服务器获得一堆数据,组装为 groups  childs   cards三个对象,让后通过Intent传给UI去更新数据的显示。

三个对象的结构: groups{ 一些java基本类型, ... , childs[ ] mchild  }         childs{一些基本类型, .... , cards mcard }   cards{一些基本类型}

                                三个对象都不算大,成员不超过20个。后2个实现了Serializable接口。

失败描述:用Intent.putExtra() 邦定groups对象数组 A

                    用mintent.getSerializableExtra()取得A并赋给groups对象数组B, 测试法现B为空。不能获得想要的对象数组.
跟踪代码,

Intent.java:
    public Intent putExtra(String name, Parcelable[] value) {
        if (mExtras == null) {
            mExtras = new Bundle();
        }
        mExtras.putParcelableArray(name, value);
        return this;
    }

Bundle.java:
Map<String, Object> mMap = null;

public void putParcelableArray(String key, Parcelable[] value) {
        unparcel();
        mMap.put(key, value);
        mFdsKnown = false;
    }

用 if(value instanceof Object){
   Log.d("******","Object[] equal Object");
} 去测试,log信息打印出来,
说明往map里面存的过程是OK的?
可是在Debug模式下 putExtra(String name, Parcelable[] value) 之后,查看intent的值,
确只有2个key--value:
key1------value1:4 存的应该是我的对象数组的大小
key2------value2:CustomerGroup[]  这里就点不开了,正常情况下应该是可以点开,里面存着成员,
说明数组到Object的转换出了问题,我认为应该转为Object[].
有兴趣的朋友一起讨论下!晚上回家有时间的话搞个测试看看。
   补充下,传单个的groups对象是成功的.
分享到:
评论
2 楼 fykec 2011-01-09  
原来是我大意,我有两个类A,B, 其中A里面有一一个List<B>,我的A对象序列化了,B类没有序列化,所以有问题,这个原理是为什么,你知道吗,看来我还有探究一下。
1 楼 fykec 2011-01-09  
你的问题我今天遇到了,发现比较大的对象通过 parcelable来传有问题,直接把对象为null就可以传过去,我再研究一下以后讨论

相关推荐

Global site tag (gtag.js) - Google Analytics