【问题标题】:Android SparseArray removeAndroid SparseArray 移除
【发布时间】:2016-05-24 23:00:15
【问题描述】:

我有最喜欢的列表;

private static SparseArray<MFavori> liste = new SparseArray<>();

我存储了这个 sharedpreferencefiles;

myactivity()
        .getSharedPreferences("favori", Context.MODE_PRIVATE)
        .edit()
        .putString(String.valueOf(key), new Gson().toJson(value))
        .apply();

但是当我在保存共享首选项后删除我最喜欢的列表中的对象时。加载之后我显示删除键(因为稀疏数组删除代码不会删除键)并且这个键有空值> {} ...

我正在调试我的应用程序并展示了这个;

在删除 sparsearray 之前,我显示两个键和两个值(正常)

但是当我删除我最喜欢的列表中的对象时,我会显示这张图片;

liste.remove(keyID);

在此代码删除值后,我显示已存储密钥。为什么?这对我来说是个问题,因为在加载后用 gson 保存此列表时,我显示空数据{} 但有密钥,所以对我来说这是个问题..

对不起我的英语不好..

【问题讨论】:

  • 您调用 remove() 时的 keyID 是什么?你能显示更多代码吗?我很难理解你想要做什么。
  • 第一个列表有两个项目 10391 和 10392。当我使用 > list.remove(10392); 删除 id 时;并调试我显示第二个屏幕。 10392 个键已经存储但值正在删除(键不删除)。
  • 保持您的项目按此 ID 排序重要吗?如果没有,你能用 HashMap 代替吗,它可能更适合这种用途?
  • 这对我很重要,因为我将 sparsearray 与 Gson 存储到 sharedpreference 中。当刷新我最喜欢的列表并使用 gson 加载 sharedpreference 时,我会显示带有空值的已删除键
  • 您也可以将 gson 与 hasmap 一起使用。这样可能会更好。

标签: android sparse-matrix


【解决方案1】:

看起来这正在按预期工作。 SparseArray.remove() 的来源使用默认对象重置映射到“keyID”的项目的值,并设置一个标志以指示需要进行垃圾收集。该文档没有说明有关删除键和值的任何内容。来自SparseArray.remove()调用的delete方法:

/**
 * Removes the mapping from the specified key, if there was any.
 */
public void delete(int key)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 2014-10-23
    • 2021-06-06
    • 2013-04-13
    • 2011-12-21
    相关资源
    最近更新 更多