2017-08-09 18 views
0

我有一個字符串數組:在按鈕訪問字符串數組點擊

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

,我有一個funtion返回字符串和IM並稱數組:

    @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僅在BU返回字符串tton點擊某個時間。大部分時間它的返回值爲null。數據總是在按鈕單擊之前插入到數組中。所以我不知道發生了什麼。

是的,我已經在調試模式下進行了測試,arrFilePaths正在獲取數據插入,但不知何故按鈕後點擊它說空(即使我使用相同的變量)。 任何人都可以解釋這個奇怪的輸出?謝謝!

+1

arrFilePaths聲明在哪裏?它很可能會失去它的價值,如果它只是一個函數的本地而不是一個全局變量 – Si8

+0

我已經在主類後面聲明瞭數組。和其以上的所有功能 –

+0

此外,我也嘗試過使用公共靜態來使其成爲全局的,有時候我仍然在獲取數據,有時候並不是。 –

回答

2

據我所看到的,你會被空每次獲得當你List<File> files具有比arrFilePaths陣列更少的元素。

想象這是文件列表[L1 , L2 , L3] 和你的陣列是[A1 , A2 , A3 , A4 , A5 , A6]

正如你從末寫作,從files結束的最後一個元素將在arrFilePaths最後位置等出現這樣的力量。最後,數組看起來像[null, null, null, L1 , L2 , L3]

顯然,此數組的第一個元素將爲null。

+0

非常感謝! –

+0

NP :)我建議你重新考慮如何存儲這些元素。如果你想使它嚴格爲4,那麼只複製例如前四個元素從​​列表中放入數組,從index = 0開始,只使用for(int i = 0; i Ivan

2

我不知道你是如何看到在下面的代碼有時是因爲我的價值觀似乎是一個合乎邏輯的問題

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

讓我們假設你的尺寸爲3讓你在相反的順序行進在這裏。因此,您填寫位置3和2和1,但只要大小變爲0,您的條件就會失敗,並且從不爲第0個元素設置值。

那麼你如果條件檢查 -

if(arrFilePaths[0]==null) 

所以它的檢查,如果第0個元素爲null,這顯然是這種情況,因爲while循環不讓它進入那裏。因此沒有數據。

,所以如果你的尺寸超過4在這種情況下你的第0個元素都會填充爲您arrFilePaths只能坐4個元素

+0

謝謝!它現在是有道理的! –

+0

@FajarKhan非常樂意提供幫助。請接受答案:) –

0

在我看來,你應該修改這一行

while (size-- > 0) 

這樣

while (size-- >= 0) { 
0

只需更換該whilefori,我看不出有任何理由可言,爲什麼你會想從末尾到前面填充該數組。