使用Intent传递自定义类对象出现的特殊情况

我们都知道Android实现Activity跳转时大多数使用Intent传递数据,用法非常简单,定义Intent对象之后调用方法就行了。
但是大多数情况下我们需要Intent传递自定义类的对象,这些自定义类是我们对一些数据的封装,这时候你会发现传递不了了,网上的一个解决方法是对自定义类序列化,方法也非常简单,直接让我们自定义的类实现一个Serializable接口。发送端代码不变,接收端方法改为使用

intent.getSerializableExtra();

这样的做法可以解决大多数情况,那么有些情况就解决不了了。
下面就开始说这个特殊情况
比如:自定义类的其中一个或几个属性,本身就没有被序列化,像Bitmap就没有被序列化。如果你自定义类里面包含Bitmap属性,那么抱歉,即便是你的自定义类已经被序列化,你的自定义类对象也不能被Intent传递。
如何解决这个问题呢,我们如果能将没有被序列化的属性转化成被序列化的属性就可以传递了,比如Bitmap我们可以转化为byte[],然后再进行传递,传递到位之后我们再转化回Bitmap,就可以了。
下面是Bitmap和byte[]相互转化的方法。直接可以用:

public static byte[] getBytes(Bitmap bitmap){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, baos);
    return baos.toByteArray();
}

public static Bitmap getBitmap(byte[] data){
    return BitmapFactory.decodeByteArray(data, 0, data.length);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值