我有一个字符串数组:
@Override
public void accept(List<File> files) throws Exception {
int size = files.size();
while (size-- > 0) {
arrFilePaths[size]=files.get(size).toString();
}
}
我有一个功能,它返回字符串并将其添加到数组:
@Override
public void onClick(View v) {
if(arrFilePaths[0]==null){
//some code
}else {
//some code
}
现在我有一个按钮,我正在访问其中的数组:
arrFilePaths
现在问题是arrFilePaths
只在按钮点击时返回字符串。大多数时候它返回null。数据总是在按钮点击之前插入到数组中。所以我不知道发生了什么。
是的,我已经在调试模式下进行了测试,并且{{1}}正在插入数据,但是在按钮之后单击它会显示为null(即使我使用相同的变量)。 任何人都可以解释这个奇怪的输出吗?谢谢!
答案 0 :(得分:2)
我不确定你是如何看待这些价值观的,因为对我来说这似乎是下面代码中的逻辑问题
while (size-- > 0) {
arrFilePaths[size]=files.get(size).toString();
}
假设您的尺寸为3,那么您将以相反的顺序到达此处。所以你填补了第3和第2位和第1位,但是只要大小变为0,你的条件就会失败并且它永远不会为第0个元素设置值。
然后你的if条件检查 -
if(arrFilePaths[0]==null)
所以它检查第0个元素是否为null,这显然是因为你的while循环没有让它进入那里。因此没有数据。
因此,如果您的尺寸超过4,那么您的第0个元素将被填充,因为arrFilePaths
只能使用4个元素
答案 1 :(得分:2)
据我所知,每当List<File> files
元素少于arrFilePaths
数组时,您就会变为空。
想象一下这是文件列表[L1 , L2 , L3]
你的数组是[A1 , A2 , A3 , A4 , A5 , A6]
当你从头开始写作时,files
末尾的最后一个元素将出现在arrFilePaths
的最后位置,所以就这么强。
最后,数组看起来像[null, null, null, L1 , L2 , L3]
。
显然,这个数组的第一个元素是null。
答案 2 :(得分:0)
在我看来,你应该修改这一行
while (size-- > 0)
像这样
while (size-- >= 0) {
答案 3 :(得分:0)
只需将while
替换为fori
,我就完全没有理由为什么要将该数组从末尾填充到前端。