【问题标题】:Wrong size of array when checking in a function签入函数时数组大小错误
【发布时间】:2015-06-08 09:57:49
【问题描述】:

我正在尝试从稀疏布尔数组中的列表视图中获取所有选中的项目,并将该数组传递给一个函数,该函数向用户显示一个对话框,然后单击“是”在数据库中为稀疏数组。

我面临的问题是在调用函数之前,我检查了稀疏数组的大小,它显示了正确的大小,但是我将它传递给的函数,一旦它被调用,它就会显示大小为 0。我有不知道为什么会这样。

这就是我正在做的事情--->

SparseBooleanArray checkedPositions;
switch (item.getId()) {
    case delete : 
        checkedPositions = listView.getCheckedItemPositions();
        Log.d(TAG, checkedPositions.size());
        confirmDeletion(checkedPositions);
        break;
}

这是我传递给它的方法--->

confirmDeletion(final SparseBooleanArray checkedPositions) {
    Log.d(TAG, checkedPositions.size());
}

对于第一个日志,我得到正确的大小,但在第二个日志中为 0。我不知道出了什么问题。任何帮助将不胜感激。

【问题讨论】:

  • 您确定您正在阅读正确的日志吗?如果是这样,唯一的解释是并发修改。
  • 是的,我对阅读正确的日志持肯定态度。但这不应该是因为当函数 confirmDeletion() 的逻辑在 switch-case 内部时,它运行得很顺利,但后来我决定把它分解,我遇到了这个问题。我有解决方法,但只是想知道为什么会发生这种情况。
  • 调试它并找出发生了什么。
  • @AjeetKhadke 抱歉,这又是不正确的行为。当我调试它时,稀疏数组中有正确数量的键和值,但它的大小不知何故为 0,这真的很奇怪。没有大小,我无法遍历所有键。有什么想法吗??
  • 1) 您看到的条目是否标记为已删除? 2) 可以从多个线程访问它吗? 3)如果这些想法都没有帮助,请将程序剥离为SSCCE

标签: java android arrays sparse-array


【解决方案1】:

由于没有SSCCE 我可以猜到你的流程不是你想的那样。将堆栈跟踪添加到日志记录中,以便您可以查看谁以及何时调用了 confirmDeletion() 方法。

另一个建议是确保您使用相同的对象。为日志添加 toString 以查看流的顺序并使用相同的对象。毕竟同一个对象确实返回相同的结果,所以看起来肯定存在一些差距,并且您使用的是不同的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 2022-12-06
    • 2022-01-08
    • 2018-08-15
    相关资源
    最近更新 更多