android 序列化写出map,序列化/反序列化LinkedHashMap(android)java

所以我想将LinkedHashMap传递给intent.

//SEND THE MAP

Intent singlechannel = new Intent(getBaseContext(),singlechannel.class);

singlechannel.putExtra("db",shows1);//perase to

startActivity(singlechannel);

//GET THE MAP

LinkedHashMap db = new LinkedHashMap();

db=(LinkedHashMap) getIntent().getSerializableExtra("db");

这个就像HashMap的魅力一样.

但是使用LinkedHashMap我遇到了一个问题,我在这里遇到了运行时错误

db=(LinkedHashMap) getIntent().getSerializableExtra("db");

我没有得到HashMap的错误.

我还收到一个警告“类型安全:从Serializable到LinkedHashMap的未经检查的强制转换”

但我也对HashMap发出了这个警告.

任何想法.非常感谢任何帮助

解决方法:

问题的根源在于您尝试将强制类型转换为泛型类型.如果没有不安全/未经检查的类型转换,则无法完成此操作.

泛型类型的运行时类型是原始类型;即,类型参数的实际类型未知的类型.在这种情况下,运行时类型将是LinkedHashMap.这不能安全地转换为LinkedMashMap< String,String>因为运行时系统无法知道所有键和值实际上都是String实例.

您有两种选择:

>您可以添加注释以告诉编译器“关闭”未经检查的强制转换.这有点冒险.如果由于某种原因,其中一个键或值实际上不是String,那么您的应用程序可能会在一个完全出乎意料的地方获得ClassCastException;例如迭代键或分配get的结果.

>您可以手动复制反序列化的地图到一个新的LinkedMashMap< String,String>,显式地将每个键和值转换为String.

UPDATE

显然,运行时异常的真正原因(与“不安全的类型转换”编译错误不同)是Android将inte 140之间的serializedExtra作为常规HashMap传递,而不是使用您提供的Map类.这在这里描述:

正如Q& A所解释的那样,没有简单的解决方法.如果要传递保留键顺序的映射,则必须将映射转换为对数组并传递它.另一方面,您需要从传递的数组重建地图.

标签:java,android,serialization,linkedhashmap

来源: https://codeday.me/bug/20190518/1130148.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值