2012-04-22 52 views
3

好吧,這是我得到了什麼:空指針訪問:可變數據只能空在這個位置

 String[] data = null; 
    String[] data2 = null; 
    String[] datas = res.split("(s1)"); 
    int i1 = 0; 
    int i2 = 0; 
    for(String datasx : datas) 
    { 
     i1++; 
     String[] datas2 = datasx.split("(s2)"); 

     for(String datas2x : datas2) 
     { 
      String[] odcinek = datas2x.split("(s3)"); 
      data[i2] = odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6]; 
      i2++; 
     } 
    } 

而且它不工作。在這條線的應用程序崩潰:

data[i2] = odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6]; 

事實上,Eclipse的給我就可以瞭如下警告:

空指針訪問:可變數據只能空在這個位置

但我不知道有什麼問題。任何人都可以幫忙嗎?謝謝。

+0

'data'數組被初始化爲'null',它永遠不會被賦值爲其他值。數組本身是空的,所以你不能爲該數組中的成員賦值,如:'data [i2] = ...' – 2012-04-22 13:51:39

+0

這裏的問題不是NPE本身,而是你需要學會檢查通過回溯代碼並查看每個變量已初始化的位置,只要通過NPE就可以導致NPE的所有變量。做這個反應,下一次,答案應該對你很明顯。我在下面刪除了我的答案,以幫助減少「回答混亂」。 – 2012-04-22 13:59:09

+0

同一主題:http://stackoverflow.com/questions/4909903/和http://stackoverflow.com/questions/20035122/ – 2016-09-11 14:09:02

回答

6

看起來像你需要dymanic列表,所以你需要的是更換String[] data = null;使用List

List data = new ArrayList<String>(); 
String[] data2 = null; 
String[] datas = res.split("(s1)"); 
int i1 = 0; 
int i2 = 0; 
for(String datasx : datas) 
{ 
    i1++; 
    String[] datas2 = datasx.split("(s2)"); 

    for(String datas2x : datas2) 
    { 
     String[] odcinek = datas2x.split("(s3)"); 
     data.add(odcinek[1] + "////" + odcinek[2] + "////" + odcinek[6]); 
     i2++; 
    } 
} 
+0

應用程序仍然FCs。仍然在同一行(data.add(...))。 – 2012-04-22 14:05:11

+0

然後確保'odcinek [1] +「////」+ odcinek [2] +「////」+ odcinek [6]'不是拋出錯誤。特別是在'odcinek [6]'。 – 2012-04-22 14:07:30

2

您需要初始化「數據」變量。在這一點上它是空的。

請嘗試以下

String[] datas2 = datasx.split("(s2)"); 
data = new String[datas2.length]; 
4

要初始化數組數據爲空,當您嘗試訪問它,它給你空指針訪問錯誤。

在嘗試訪問它之前,必須將它初始化爲適當的類型,即將其初始化爲String []而不是null。