记录自己成长,分享技术博客,探索软件开发系列问题。

Android中如何在Parcelable中使用泛型?

Android技术 方耀宇 1309℃ 0评论

问题来源

项目开发过程中,实体类实现Parcelable接口是常见的事情,实体类除了要实现它的几个方法之外,还另外要定义一个静态常量CREATOR,如下例所示:

看完上面的代码,您觉得他会正常运行吗?答案肯定是不能,不然我也没必要写这篇文章了。

仔细观察上面代码就会发现这个实体类中有个泛型存在,泛型在反序列化的时候,没有具体类型,拿不到它的CREATOR!

所以如果拿不到CREATOR,那么就无法执行反序列化,同时Android系统的源码我们不能去修改,只能寻找其他的途径了。

错误的解决方案

网络流传了一种解决方案是:把泛型数据用Bundle包装,然后序列化和反序列化这个Bundle对象,进过测试发现这种方案行不通。代码如下:

最终解决方案

经过以上的分先发现,反序列化之所失败,就是因为我们拿不到泛型对应类的classLoader,那么从这个角度出发,我们是否可以序列化的时候先保存这个泛型的标准类名(报名+类名,例如:com.feeyo.DataEntity),然后再反序列化的时候利用Java 反射得到classLoader。有了思路,代码如下:

 

转载请注明:方耀宇 - 个人技术博客 » Android中如何在Parcelable中使用泛型?

喜欢 (3)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址