首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过intent(Parcelable)传递自定义对象返回null

通过intent传递自定义对象返回null的原因可能是以下几种:

  1. 自定义对象未实现Parcelable接口:在Android中,如果要通过intent传递自定义对象,该对象需要实现Parcelable接口。Parcelable接口提供了一种序列化对象的方式,使得对象可以在不同组件之间进行传递。如果自定义对象没有实现Parcelable接口,那么在传递过程中就会出现问题,导致返回null。

解决方法:确保自定义对象实现了Parcelable接口,并正确地实现了相关方法。

  1. 自定义对象的成员变量不支持序列化:当自定义对象中的某个成员变量不支持序列化时,也会导致通过intent传递对象返回null。例如,如果自定义对象中包含了非Serializable或非Parcelable类型的成员变量,那么在传递过程中就会出现问题。

解决方法:确保自定义对象中的所有成员变量都支持序列化,即实现了Serializable接口或Parcelable接口。

  1. 数据过大导致传递失败:如果自定义对象的数据量过大,超过了intent传递数据的限制大小,那么传递过程中就会失败,返回null。

解决方法:考虑使用其他方式传递大数据量的对象,例如使用全局变量、数据库或文件存储等。

总结起来,通过intent传递自定义对象返回null的原因可能是对象未实现Parcelable接口、成员变量不支持序列化或数据过大导致传递失败。解决方法是确保对象实现了Parcelable接口,成员变量支持序列化,并考虑使用其他方式传递大数据量的对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android使用Service实现IPC通信的2种方式

, BIND_AUTO_CREATE); } }); aidl中自定义对象传递 主要步骤如下: 定义自定对象,需要实现Parcelable接口 新建自定义对象的aidl文件 在传递数据的aidl...文件中引用自定义对象自定义对象以及aidl文件拷贝到需要bindService的app中,主要路径也要原封不动 我们来看一下具体的代码: 1、定义自定义对象,并实现Parcelable接口 public...aidl文件 package com.jxx.server.aidl; //注意parcelable 是小写的 parcelable ServerInfo; 3、引用自定义对象 package com.jxx.server.aidl...– inout:修改都收同步的 当使用out和inout时,除了要实现Parcelable外还要手动添加readFromParcel(Parcel dest) 4、拷贝自定义对象以及aidl文件到在要引用的...中,将Server端传递过来的Messenger对象进行保存 同时Client端也新建一个Messenger对象通过Server传递过来的Messenger注册到Server端,保持通信用。

1.1K20

Intent传递数据全解

可以以直接通过调用Intent的putExtra()方法存入数据,然后在获得Intent后调用getXxxExtra获得 对应类型的数据;传递多个的话,可以使用Bundle对象作为容器,通过调用Bundle...bundle); startActivity(intent); Intent传递对象 传递对象的方式有两种:将对象转换为Json字符串或者通过Serializable...方法,内容接口描述,默认返回0就可以 ③实例化静态内部对象CREATOR实现接口Parcelable.Creator ④同样式通过Intent的putExtra()方法传入对象实例,当然多个对象的话...Intent传递Bitmap bitmap默认实现Parcelable接口,直接传递即可 Bitmap bitmap = XXXX; Intent intent = new Intent(); Bundle...bundle = new Bundle(); bundle.putParcelable("bitmap", bitmap); intent.putExtra("bundle", bundle); 通过全局对象传递数据

88640
  • 使用 Intent 启动 Activity和Activity之间的数据传递

    接下来是借助Intent来进行Activity之间的数据传递,要借助Intent对象来进行Activity 之间的数据传递,要借助Intent类的putExtra方法: ?...所以我们可以通过我们自定义的类型实现这个接口,然后通过这个参数使得我们的自定义类型的对象能够通过Intent对象来进行传递,接下来通过一个例子来试验: 新建一个Android工程: activity_main.xml...要传输的数据设置为Bundle对象,其实即使我们直接通过Intent对象的putExtra方法 * 来传送数据,在内部还是使用Bundle对象来存储这个数据,因此Intent其实是通过...,在第二个方法sendImageData方法中我们使用bundle.putParcelable方法来储存一个Bitmap对象,在上面提过了我们可以用Serializable接口来将我们要传递自定义数据...成功的显示,单击返回后再单击“传送图片数据”按钮: ? good,图片成功的显示,再单击返回后单击“传送自定义数据”按钮: ?

    2.2K10

    进程间通信的方式(1)

    ,比如基本数据类型,实现了Parcelable接口的对象,实现了Serializable接口的对象以及一些Android支持的特殊对象(具体内容可以看下Bundler这个类,Bundler不支持的类型我们无法通过他在进程间传递数据...服务端进程 首先,我们需要在服务端创建一个Service来处理客户端的连接请求,同时创建一个Handler并通过它来创建一个Messenger对象,然后在Service的onBind中返回这个Messenger...客户端进程 客户端进程中,首先要绑定服务端的Service,绑定成功后用服务端返回的IBinder对象创建一个Messenger,通过这个Messenger就可以向服务端发送消息了,发消息类型为 Message...通过上面的例子可以看出,在Messenger中进行数据传递必须将数据放入Messsage中,而Messenger和Message都实现了Parcelable接口,因此可以跨进程传输,简单来说,Messebger...这就意味着我们自定义Parcelable对象是无法通过object字段来传输的,读者可以试一下。

    87410

    Android开发笔记(二十七)对象序列化

    代码在函数调用时可以直接传递对象,但更多的场合例如与文件交互、与网络交互、组件之间交互等等,就无法直接使用未经处理的对象。...对于某些复杂的对象,也可以重写writeObject、readObject方法来自定义序列化过程,比如队列、映射这些容器类就重写了writeObject和readObject方法。...Parcelable Parcelable的设计初衷,便是因为Serializable方式较耗资源且执行速度偏慢,为此Android设计了Parcelable用于组件之间的消息传递(包括线程间传递与进程间传递...(读数据)和newArray describeContents : 返回0即可 序列化对象的消息传递 下面是Serializable和Parcelable两种方式在Activity之间传递消息的代码例子...暂不支持直接操作布尔boolean类型,但能间接通过设置byte位来实现boolean类型的参数传递

    62740

    Android序列化总结

    Parcelable接口来实现序列化操作,Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如通过Intent在activity...* 重写接口中的两个方法: * createFromParcel(Parcel in) 实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层, * newArray...其实通过Intent传递复杂类型(如自定义引用类型数据)的数据时就需要使用Parcelable对象,如下是日常应用中Intent关于Parcelable对象的一些操作方法,引用类型必须实现Parcelable...接口才能通过Intent传递,而基本数据类型,String类型则可直接通过Intent传递而且Intent本身也实现了Parcelable接口,所以可以轻松地在组件间进行传输。...,其元素必须是实现了Parcelable接口的数据 除了以上的Intent外系统还为我们提供了其他实现Parcelable接口的类,再如Bundle、Bitmap,它们都是可以直接序列化的,因此我们可以方便地使用它们在组件间进行数据传递

    79520

    Android点将台:外交官

    Intent互相联系,并且传递数据,可谓名副其实的"外交官" 1.Intent构造函数 源码上来看一共有8个构造函数,上面两个是空参和隐藏的,不用管 左边两个通过拷贝来生成Intent对象,两参的拷贝是似有的...右边两个通过设置匹配信息方法来生成Intent对象(隐式) 下面两个加入了ComponentName来生成Intent对象 (显式) 2.Intent中的常用成员变量 component(组件...(this); } |----根据调用的intent对象,直接返回了一个新的实例,本质上合拷贝构造并无区别 四、系列化与反序列化 序列化有什么用?...1.永久的保存对象数据(保存在文件当中,或者是磁盘中),需要时反序列化生成对象 2.将对象数据转换成字节流进行网络传输 3.使用Intent传递序列化对象 1.对象的序列化Serializable /...= null) { result+=arrData.toString()+"\n" } id_tv_result.append(result) 2.Intent传递Bundle对象 简单来看就是键值对

    16910

    Activity之间的数据传递方法汇总

    1、通过 Intent 传递 我们在进行 Activity 跳转时,是要有 Intent,此时 Intent 是可以携带数据的,我们可以利用它将数据传递给其它Activity。...Intent 应该是系统提供的支持类型最广,功能最全面的传递方式了。基本数据类型、复杂数据类型(如数组、集合)、自定义数据类型等等都能支持,而且使用起来也不复杂。...因此当我们想让自定义的类型也能通过 Intent 传递时,只需要让该类实现 Serializable 接口即可。...2、通过全局变量传递 顾名思义,就是借助一个全局变量做中转,去传递数据。还是以前面的两个 Activity 为例,传递不支持序列化的 Student 对象。...我们也可以通过自定义文件操作方式去实现数据的存取,进而实现 Activity 之间的数据传递。 说了栗子不煮了,有兴趣自己去查一下吧。

    3.2K40

    android使用AIDL跨进程通信(IPC)

    它是使用代理类在客户端和实现端传递数据。...2.创建一个包名用来存放aidl文件 创建一个包名用来存放aidl文件,比如com.ryg.sayhi.aidl,在里面新建IMyService.aidl文件,如果需要访问自定义对象,还需要建立对象的...aidl文件,这里我们由于使用了自定义对象Student,所以,还需要创建Student.aidl和Student.java。...AIDL传输非基本类型的对象,被传输的对象需要序列化,序列化功能java有提供,但是android sdk提供了更轻量级更方便的方法,即实现Parcelable接口,关于android的序列化,我会在以后写文章介绍...方法返回的binder对象得到IMyService的实例,得到实例就可以调用它的方法了 mIMyService = IMyService.Stub.asInterface(service); try

    1.9K20

    Android 进阶6:两种序列化方式 Serializable 和 Parcelable

    例如,通过对象序列化到剪贴板,可在不同的应用程序之间共享对象。您可以将对象序列化到流、磁盘、内存和网络等等。远程处理使用序列化“通过值”在计算机或应用程序域之间传递对象。...在安卓开发中,我们在组件中传递数据时常常使用 Intent 传输数据时需要传递 Serializable 或者 Parcelable 的数据,比如 Intent.putExtra 方法: public...方法中的参数,用于标识当前对象作为返回返回 //有些实现类可能会在这时释放其中的资源 public static final int PARCELABLE_WRITE_RETURN_VALUE...Parcel 是一个载体,它可以包含数据或者对象引用,然后通过 IBinder 在进程间传递。...而在运行时数据传递时建议使用 Parcelable,比如 Intent,Bundle 等,Android 底层做了优化处理,效率很高。

    1.4K50

    跨进程访问(AIDL服务)

    其中Activity可以跨进程调用其他应用程序的Activity 看看这里;还有这里 Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应用程序的数据进行增...Cursor对象,而Service返回的是Java对象,这种可以跨进程通讯的服务叫AIDL服务。...,系统会调用ServiceConnection.onServiceConnected方法,通过改方法的service参数值可以获得AIDL服务对象。...---- 传递复杂数据的AIDL服务 AIDL服务只支持有限的数据类型,因此如果使用AIDL传递复杂的数据就需要做进一步的处理。...该接口用于序列化对象。在Android中之所以使用Parcelable接口序列化,而不是使用java.io.Serializable接口,主要是为了提高效率。

    80820

    Android AIDL 跨进程通信

    安卓 IPC 跨进程通信有很多种方式,我们可以用 Bundle传递数据,通过 Intent 意图去打电话,在 Uri 里面传递电话号码 //手动拨号将Intent.ACTION_CALL改为Intent.ACTION_DIAL...Intent intent = new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" + phoneNum...); intent.setData(data); startActivity(intent); ContentProvider 通过数据共享来获取另一个应用的数据,Socket...如果我们在 AIDL 中需要传递自定义数据类型,那就必须有一个实现序列化的实体类,基本数据类型除了 Short 外,AIDL 都支持,List、Map也同样支持,前提是他们装载的元素是 AIDL 支持的...in 表示客户端传递数据给服务端,然后就不管了,没有声明默认也是这种 out 表示即使客户端传递了一个非空的对象给服务端,服务端依然会自己实例化一个空对象(里面的参数没有值而已) inout 这个修饰符有争议

    46230

    Android AIDL 传递对象(Parceable)

    article/details/78444374 AndroidStudio 引用 aidl 文件的两种方法 Android AIDL 教程 (一)—— 简单的示例 Android AIDL 传递对象...Parceable) 在上一篇文章中 Android AIDL 教程 (一)—— 简单的示例,我们介绍了怎样使用 AIDL 进行进程间的通讯,并简单写了一个 Demo,今天,让我们一起来学习怎样在 AIDL 中传递对象...MusicInfo; 指定包名,并声明 MusicInfo 是 parcelable,注意 parcelable 是小写的 p,不是大写的 P。...通过服务端 Service 的 Action 启动, 当启动 Service 成功的时候,将服务端返回的 Binder 保存下来并转化成相应的实例。...第二步:通过服务端 Service 的 Action 启动, 当启动 Service 成功的时候,将服务端返回的 Binder 保存下来并转化成相应的实例。

    74820

    浅谈ViewModel

    2) 构造数据对象 自定义ViewModel类,继承ViewModel; 在自定义的ViewModel类中添加需要的数据对象; public class DemoViewModel extends ViewModel...和Activity / Fragment获取ViewModelProvider; 通过ViewModelProvider和自定义ViewModel类获取自定义ViewModel对象; 从自定义ViewModel...+onFragmentResult() 大致流程: 跳转时需要将数据按k-v封装入Bundle,或者将数据Parcelable传递给下个页面; 下个页面修改数据并返回后,需要从onFragmentResult...()的Intent解析并同步数据; Intent传递的数据大小总量不能超过1M; 麻烦且数据大小有限制。...ViewModel同时规避了传统方法的缺点: bind同一个Activity的Fragments均可以通过ViewModelProvider获取共同的数据对象,无需主动进行数据传递; 脱离Intent

    2.7K90
    领券