如何实现新的 `.getSerializable()` 方法以从已保存的实例捆绑中将数据反序列化为哈希映射?

5 浏览
0 Comments

如何实现新的 `.getSerializable()` 方法以从已保存的实例捆绑中将数据反序列化为哈希映射?

我之前使用的是bundle.getSerializable("data") as HashMap,但是在将sdkVersion更改为33之后,.getSerializable() API被更新了

我无法将其用于HashMap

我尝试了以下代码:

savedInstanceState.getSerializable("answer", HashMap::class.java)!!

但是它给出了警告 -

只有类可以在类字面量的左侧使用

经过一些搜索,我找到了这篇帖子

上面引用的答案如下 -

您不能在class中使用泛型

现在我还没有找到解决这个问题的方法。有什么建议吗?

0
0 Comments

问题的出现原因是:在Android中,当我们需要将数据从一个地方传递到另一个地方时,常常使用Bundle来保存和传递数据。在某些情况下,我们可能需要将一个HashMap对象保存到Bundle中,然后再从Bundle中取回并反序列化为HashMap对象。然而,在过去的实现中,Bundle类只提供了一个getSerializable()方法来反序列化对象,但它不能直接反序列化为HashMap对象。

解决方法是:Android开发团队已经意识到这个问题,并在后续版本中添加了一个新的getSerializable()方法,可以通过传递HashMap::class.java作为第二个参数来将数据反序列化为HashMap对象。然后,我们可以将结果强制转换为HashMap类型,以便使用该HashMap对象。

以下是一个示例代码,演示了如何使用新的getSerializable()方法来将数据反序列化为HashMap对象:

val map = HashMap()

map[1] = 123

val bundle = Bundle()

bundle.putSerializable("answer", map)

val serializedMap = bundle.getSerializable("answer", HashMap::class.java) as HashMap

println(serializedMap[1])

这个示例代码中,我们首先创建一个HashMap对象,并将其保存到Bundle中。然后,我们使用新的getSerializable()方法从Bundle中取回保存的对象,并将其强制转换为HashMap类型。最后,我们可以通过使用HashMap的键来访问反序列化后的数据。

同样的方法也适用于ArrayList对象。只需将ArrayList.class作为第三个参数传递给新的getSerializable()函数,并将结果强制转换为ArrayList类型即可。

通过使用这个新的getSerializable()方法,我们可以更方便地将数据从Bundle中反序列化为HashMap或ArrayList对象,使得数据的传递和处理更加简单和高效。

0