`
lzh20044178
  • 浏览: 2975 次
  • 性别: 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就可以传过去,我再研究一下以后讨论

相关推荐

    Intent传递对象、对象数组

    总结,Intent在Android开发中扮演着核心角色,通过实现Parcelable接口,我们可以顺利地在Intent中传递对象和对象数组,实现不同组件之间的数据交互。在实际开发中,根据具体需求和性能要求选择合适的数据传递方式。

    Android多进程通讯AIDL传递Parcelable对象

    1. AIDL只能传递基本数据类型、Parcelable对象和实现了Parcelable接口的数组。 2. 当传递复杂的对象结构时,需要确保所有对象都实现了Parcelable。 3. 跨进程通信可能会有性能开销,因此应谨慎使用。 4. 服务端需要...

    【Intent传递】对象、数组

    2. 对象数组:对象数组的传递方式与单个对象相似,需要先实现Parcelable接口,然后使用putParcelableArrayExtra()添加到Intent,接收端用getParcelableArrayExtra()获取。 3. 集合:List、ArrayList等集合也可以通过...

    Android 数据传递(Intent、Bundle、Serializable、Parcelable等)

    数据通过Intent.putExtra()方法添加,支持基本数据类型(如字符串、整型、浮点型)以及Parcelable和Serializable对象。当Intent传递的数据量较小或不涉及复杂对象时,Intent是非常方便的选择。 2. **Bundle**: ...

    安卓自带Parcelable序列化

    `Parcelable`是Android中用于对象序列化的接口,它允许对象转换为字节数组,便于存储或在进程间传递。这个接口比`Serializable`更高效,但实现起来相对复杂一些。通常,当一个自定义类需要频繁在Intent、Bundle或者...

    Xamarin.Android之Intent传递对象简单实例

    `IParcelable`接口是Android平台特有的,用于将对象转换为字节流,以便在Intent或其他地方传输。实现这个接口涉及几个步骤: 1. **定义Parcel类常量**:创建一个名为`Creator`的静态内部类,它实现`ICreator`接口。...

    实验七 使用Intent在Activity间传输数据

    数据类型可以是基本类型(如int、String)、Parcelable对象(如Bitmap、Parcelable数组)或Serializable对象。例如,传递一个字符串: ```java intent.putExtra("key", "value"); ``` 在目标Activity中,使用`...

    Parcelable in Android

    在Android开发中,Parcelable接口是用于对象序列化的一种高效机制,相比于Java的Serializable接口,它在数据传输或者存储时提供了更高的性能。理解并熟练使用Parcelable对于优化应用性能至关重要。 Parcelable接口...

    android studio下使用aidl接口传递自定义对象

    在Android开发中,有时我们需要在不同的进程间进行通信,这时我们可以使用Android Interface Definition Language (AIDL)。AIDL提供了一种机制,使得Android应用能够跨进程传递数据,包括自定义对象。本文将深入探讨...

    Activity跳转时传递Bitmap对象

    在Activity间传递Bitmap,有两种主要方式:Intent extras和使用Parcelable接口。由于Bitmap对象较大,直接通过Intent的extras传递可能会导致内存溢出,因为Intent的大小有限制。因此,更推荐使用Parcelable接口。 1...

    intent传递对象

    当需要在Intent中传递复杂对象时,Android提供了两种主要的序列化方式:Parcelable和Serializable。下面我们将详细探讨这两种方式以及它们在实际应用中的优缺点。 **Parcelable接口** Parcelable是Android平台特有...

    Android中Parcelable的使用详解

    在Android开发中,数据传输和保存是常见的需求,而Parcelable接口就是Android系统提供的一种高效的数据序列化方式。相比Java标准的Serializable接口,Parcelable虽然使用起来更复杂,但是其性能优势明显,尤其适合于...

    Intent传值Demo

    Intent传值是Android开发中的常见操作,涵盖了多种数据类型的传输方式。下面将详细介绍如何使用Intent传递各种类型的数据以及涉及到的Parceable和Serializable接口。 一、基本数据类型的传递 Intent支持传递基本...

    AIDL List传递 String传递(android studio)

    在Android开发中,有时我们需要在不同的进程间进行通信,例如服务和应用之间的数据交互。这时,Android Interface Definition Language (AIDL) 就派上用场了。AIDL 是 Android 提供的一种接口定义语言,用于创建进程...

    eclipse 下的android Activity值传递

    总之,Eclipse下的Android Activity值传递主要依赖Intent和其附加的extras,可以通过基本类型、Parcelable对象、Serializable对象或Bundle进行数据传输。理解这些机制对于构建功能丰富的Android应用至关重要。在实际...

    android 序列化1

    `Parcelable`接口是Android框架提供的一种高效的数据序列化方式,主要用于那些需要频繁在内存、Intent、或者进行进程间通信(IPC)的对象。一个类如果实现了`Parcelable`接口,就必须有一个静态成员变量`CREATOR`,...

    Android学习笔记–Activity中使用Intent传值示例代码

    在Activity间传递数据,我们通常使用Intent的`putExtra()`方法来添加额外的数据,这些数据可以是基本类型(如String、int、boolean等)、数组或者Parcelable类型的对象。例如,在MainActivity中创建一个Intent,指向...

    Android序列化传递数据

    序列化是将对象转换为可存储或传输格式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。下面将详细介绍这两种序列化机制及其在数据传递中的应用。 **Parcelable** 是Android特有的序列...

    TestParcal

    序列化是一种将对象的状态转换为可存储或可传输的形式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。 首先,我们来看`Serializable`接口。这是Java提供的一个标记接口,任何实现了...

    Android 应用程序之间的通信

    它可以携带Parcelable和Serializable接口的对象,包括基本类型、字符串、数组以及自定义对象。这对于在应用程序之间共享数据非常有用。同时,Intent还支持额外的Extras字段,用于添加更多附加信息。 接下来,...

Global site tag (gtag.js) - Google Analytics