我们都知道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);
}