gpt4 book ai didi

android - 共享首选项 - CastException : HashSet cannot be cast to TreeSet

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:11 25 4
gpt4 key购买 nike

我正在尝试使用以下代码将 TreeSet 存储在 SharedPreferences 中:

        Set<String> chemicalValuesSet = new TreeSet<>();
chemicalValuesSet.add("id: " + checkForNull(jsonChemicalValues.getString("id")));
editor.putStringSet(SP_CHEMICAL_VALUES, chemicalValuesSet);
editor.apply();

但是,当我尝试访问那个 TreeSet 时,我遇到了转换错误,就好像这个集合被声明为 HashSet 一样。

    SharedPreferences sharedPreferences =
getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE);
TreeSet<String> chemicalValues =
(TreeSet<String>) sharedPreferences.getStringSet(SP_CHEMICAL_VALUES, null);

我不知道如何解决这个问题。此外,当我开始编写这部分时,我将 chemicalValuesSet 设置为 HashSet 并且检索没有任何问题,之后我决定使用 TreeSet .这就是为什么我尝试清理并重新启动项目,但仍然存在同样的问题。

但是,如果我只是将类型更改为 HashSet在我取回这个集合的部分,它没有提示地工作。

最佳答案

您只是对 SharedPreferences 及其编辑器的工作方式做出了错误的假设。 API 从不保证调用 getStringSet() 时获得的 Set 与调用 putStringSet() 时存储的相同,甚至是相同的实现。它只是说你可以传递一个 Set,也可以得到一个 Set。

如果 API 文档说它返回一个 Set,您不应该假设它返回一个 TreeSet 或 HashSet。只有它返回一个集合。如果您绝对需要 TreeSet,则创建一个并将返回的 Set 中的项目复制到 TreeSet。

关于android - 共享首选项 - CastException : HashSet cannot be cast to TreeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31780139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com