问题场景描述: 从远程服务器获得一堆数据,组装为 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对象是成功的.
分享到:
相关推荐
总结,Intent在Android开发中扮演着核心角色,通过实现Parcelable接口,我们可以顺利地在Intent中传递对象和对象数组,实现不同组件之间的数据交互。在实际开发中,根据具体需求和性能要求选择合适的数据传递方式。
1. AIDL只能传递基本数据类型、Parcelable对象和实现了Parcelable接口的数组。 2. 当传递复杂的对象结构时,需要确保所有对象都实现了Parcelable。 3. 跨进程通信可能会有性能开销,因此应谨慎使用。 4. 服务端需要...
2. 对象数组:对象数组的传递方式与单个对象相似,需要先实现Parcelable接口,然后使用putParcelableArrayExtra()添加到Intent,接收端用getParcelableArrayExtra()获取。 3. 集合:List、ArrayList等集合也可以通过...
数据通过Intent.putExtra()方法添加,支持基本数据类型(如字符串、整型、浮点型)以及Parcelable和Serializable对象。当Intent传递的数据量较小或不涉及复杂对象时,Intent是非常方便的选择。 2. **Bundle**: ...
`Parcelable`是Android中用于对象序列化的接口,它允许对象转换为字节数组,便于存储或在进程间传递。这个接口比`Serializable`更高效,但实现起来相对复杂一些。通常,当一个自定义类需要频繁在Intent、Bundle或者...
`IParcelable`接口是Android平台特有的,用于将对象转换为字节流,以便在Intent或其他地方传输。实现这个接口涉及几个步骤: 1. **定义Parcel类常量**:创建一个名为`Creator`的静态内部类,它实现`ICreator`接口。...
数据类型可以是基本类型(如int、String)、Parcelable对象(如Bitmap、Parcelable数组)或Serializable对象。例如,传递一个字符串: ```java intent.putExtra("key", "value"); ``` 在目标Activity中,使用`...
在Android开发中,Parcelable接口是用于对象序列化的一种高效机制,相比于Java的Serializable接口,它在数据传输或者存储时提供了更高的性能。理解并熟练使用Parcelable对于优化应用性能至关重要。 Parcelable接口...
在Android开发中,有时我们需要在不同的进程间进行通信,这时我们可以使用Android Interface Definition Language (AIDL)。AIDL提供了一种机制,使得Android应用能够跨进程传递数据,包括自定义对象。本文将深入探讨...
在Activity间传递Bitmap,有两种主要方式:Intent extras和使用Parcelable接口。由于Bitmap对象较大,直接通过Intent的extras传递可能会导致内存溢出,因为Intent的大小有限制。因此,更推荐使用Parcelable接口。 1...
当需要在Intent中传递复杂对象时,Android提供了两种主要的序列化方式:Parcelable和Serializable。下面我们将详细探讨这两种方式以及它们在实际应用中的优缺点。 **Parcelable接口** Parcelable是Android平台特有...
在Android开发中,数据传输和保存是常见的需求,而Parcelable接口就是Android系统提供的一种高效的数据序列化方式。相比Java标准的Serializable接口,Parcelable虽然使用起来更复杂,但是其性能优势明显,尤其适合于...
Intent传值是Android开发中的常见操作,涵盖了多种数据类型的传输方式。下面将详细介绍如何使用Intent传递各种类型的数据以及涉及到的Parceable和Serializable接口。 一、基本数据类型的传递 Intent支持传递基本...
在Android开发中,有时我们需要在不同的进程间进行通信,例如服务和应用之间的数据交互。这时,Android Interface Definition Language (AIDL) 就派上用场了。AIDL 是 Android 提供的一种接口定义语言,用于创建进程...
总之,Eclipse下的Android Activity值传递主要依赖Intent和其附加的extras,可以通过基本类型、Parcelable对象、Serializable对象或Bundle进行数据传输。理解这些机制对于构建功能丰富的Android应用至关重要。在实际...
`Parcelable`接口是Android框架提供的一种高效的数据序列化方式,主要用于那些需要频繁在内存、Intent、或者进行进程间通信(IPC)的对象。一个类如果实现了`Parcelable`接口,就必须有一个静态成员变量`CREATOR`,...
在Activity间传递数据,我们通常使用Intent的`putExtra()`方法来添加额外的数据,这些数据可以是基本类型(如String、int、boolean等)、数组或者Parcelable类型的对象。例如,在MainActivity中创建一个Intent,指向...
序列化是将对象转换为可存储或传输格式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。下面将详细介绍这两种序列化机制及其在数据传递中的应用。 **Parcelable** 是Android特有的序列...
序列化是一种将对象的状态转换为可存储或可传输的形式的过程,而在Android中,有两种主要的序列化方式:Parcelable和Serializable。 首先,我们来看`Serializable`接口。这是Java提供的一个标记接口,任何实现了...
它可以携带Parcelable和Serializable接口的对象,包括基本类型、字符串、数组以及自定义对象。这对于在应用程序之间共享数据非常有用。同时,Intent还支持额外的Extras字段,用于添加更多附加信息。 接下来,...