首页
学习
活动
专区
工具
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接口,成员变量支持序列化,并考虑使用其他方式传递大数据量的对象。

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

相关·内容

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); 通过全局对象传递数据

93440

使用 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.3K10
  • 进程间通信的方式(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字段来传输的,读者可以试一下。

    88310

    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,它们都是可以直接序列化的,因此我们可以方便地使用它们在组件间进行数据传递

    81920

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

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

    63840

    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对象 简单来看就是键值对

    19810

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

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

    3.2K40

    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.6K50

    跨进程访问(AIDL服务)

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

    84220

    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 这个修饰符有争议

    47530

    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 保存下来并转化成相应的实例。

    80420

    浅谈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

    Android学习--还有一些小技巧

    传递对象 1、Serializable方式            2、Parcelable方式 三、日志控制       四、创建定时任务   五、聊聊Doze模式       六、多窗口...,比如我们见过的调用 putExtra(键,值)方法来添加要传递的数据,之后通过调用 getIntent().getStringExtra(键)来获取我们传递的值,通过这种方法我们能传递的对象类型是有限的...{ return name; } public int getAge() { return age; } }       接下来我们看看这个自定义对象的传递以及获取...Intent中传递就是因为我们自定义为类实现了 Serializable 接口。...Parcelable ----       Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都将是 Intent 所支持的数据类型,这样也就实现传递对象的功能。

    61530

    Android 最全 Intent 传递数据姿势

    ,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的是如何使用 Intent 传递对象及集合,我们知道Intent...默认情况下,像 List、Bitmap 等默认帮我们已经实现了序列化,我们就可以直接进行传递,还有一些像 Map 集合,自定义的 class,默认是没有实现序列化的接口的,我们必须要先实现序列化才可以进行传递...1.传递序列化对象 1.1 方式一 这种方式比较简单,我们可以先将对象使用 Gson 先序列化成 Json 字符串,然后作为字符串来使用 Intent,这种方式的好处是不需要实现 Sereriable...类默认也是已经实现了 Parcelable 接口的,所以可以传递 Bundle 对象。...(); User user = (User)intent.getSerializableExtra("user"); 1.4 方式四 传递实现了 Parcelable 接口的对象,这种方式比实现 Serializable

    2.8K21

    Android开发笔记(五十三)远程接口调用AIDL

    但是Messenger每次调用都只能传递一个消息包,不能很好的完成一些复杂的调用,比如说我们想像API调用那样通过不同的方法来实现不同的动作,这时Messenger就难以实现了。...下面是一个AIDL接口定义文件的例子: interface IUserService { double multiply(in double a1, in double a2); } 方法中传递了自定义数据结构...如果想在aidl方法中使用自定义数据结构,则需加上如下步骤: 1、把自定义数据结构的代码(如User.java)挪到aidl包下面,这个数据结构必须实现Parcelable接口; 2、在aidl...包下新建一个User.aidl文件,文件内容为“parcelable User;”;很简单,告诉aidl,我这里有个叫做User的parcelable对象; 3、在aidl接口定义中添加新的方法,并使用...同时Intent对象也只能通过setAction来指定对方服务的动作,而不能直接指定对方服务的class; 3、绑定服务后,再调用aidl服务端,即可使用mService来调用相应的方法;

    83730
    领券