【问题标题】:Accessing String Array in Button Click在按钮单击中访问字符串数组
【发布时间】:2017-08-09 13:55:00
【问题描述】:

我有一个字符串数组:

private String [] arrFilePaths=new String[4];

我有一个函数可以返回字符串并将其添加到数组中:

                   @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 有时仅在按钮单击时返回字符串。大多数时候它返回null。在单击按钮之前,数据总是被插入到数组中。所以我不知道发生了什么。

是的,我已经在调试模式下进行了测试,arrFilePaths 正在插入数据,但是在单击按钮后以某种方式显示为 null(即使我使用的是相同的变量)。 谁能解释一下这个奇怪的输出?谢谢!

【问题讨论】:

  • arrFilePaths 在哪里声明?如果它只是函数的局部变量而不是全局变量,它很可能会丢失值
  • 我已经在主类之后声明了数组。及其最重要的功能
  • 除此之外,我还尝试了 public static 使其成为全球性的,但有时我仍然在获取数据,有时却没有。
  • 你能发布你的类文件的最小代码吗?我们需要了解您的代码流以查看断开连接的位置。谢谢。

标签: android arrays string


【解决方案1】:

据我所知,每当您的 List&lt;File&gt; files 的元素少于 arrFilePaths 数组时,您都会得到 null。

想象一下这是文件列表[L1 , L2 , L3] 你的数组是[A1 , A2 , A3 , A4 , A5 , A6]

当您从末尾开始写入时,files 末尾的最后一个元素将出现在 arrFilePaths 的最后一个位置,依此类推。

最后,数组看起来像[null, null, null, L1 , L2 , L3]

显然,这个数组的第一个元素将为空。

【讨论】:

  • 谢谢,有道理!
  • np :) 我建议您重新考虑如何存储这些元素。如果你想让它严格为 4,那么只复制例如可能是有意义的。列表中的前 4 个元素并将它们放入从 index=0 开始的数组中,只需使用 for(int i = 0; i &lt; files.size() &amp;&amp; i &lt; array.length; i++) { array[i] = files.get(i); }
【解决方案2】:

有时我不确定您是如何看待这些值的,因为在我看来,下面的代码似乎是一个逻辑问题

while (size-- > 0) {
   arrFilePaths[size]=files.get(size).toString();
 } 

假设您的尺码为 3,因此您以相反的顺序在这里旅行。因此,您填充位置 3、2 和 1,但一旦大小变为 0,您的条件就会失败,并且它永远不会设置第 0 个元素的值。

然后你的 if 条件检查 -

if(arrFilePaths[0]==null)

所以它检查第 0 个元素是否为空,这显然是因为你的 while 循环没有让它进入那里。因此没有数据。

因此,如果您的尺寸大于 4,在这种情况下,您的第 0 个元素将被填充,因为您的 arrFilePaths 只能包含 4 个元素

【讨论】:

  • 谢谢!现在说得通了!
  • @FajarKhan 非常乐意提供帮助。请接受答案:)
【解决方案3】:

我认为你应该修改这一行

while (size-- > 0)

喜欢这个

while (size-- >= 0) {

【讨论】:

    【解决方案4】:

    只需将 while 替换为 fori,我完全看不出有任何理由要从头到尾填充该数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-26
      • 2017-12-01
      • 1970-01-01
      • 2021-07-31
      • 2012-01-27
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多