2012-12-06 127 views
0

我想通過php文件從數據庫表中獲取數據並在android中顯示它。在PHP文件中,我用「#」分隔每列。 所以現在我得到像4#2012-11-06#test1#test2這樣的值。但是對於某些列沒有數據。所以這些值就像5 ###一樣。 在這裏,當我用#分割並顯示數據時,它正在拋出界限異常。我該如何解決這個問題?數組索引越界異常android

代碼:

String st="1#2012-10-30#[email protected]#2012-10-30#[email protected]#2012-11-06#[email protected]##[email protected]##@22##@23##@"; 
    String[] val = st.trim().split("@"); 

for (int i = 0; i < val.length; i++) 
     { 
      String str = val[i]; 

      String arr[] = str.split("#"); 
        System.out.println("arr0" + arr[0]); 
      System.out.println("arr1" + arr[1]); 
      System.out.println("arr2" + arr[2]); 
} 
+2

帖子一些代碼和發佈錯誤logcat,所以我們可以幫助你更多。 –

+0

arr [2]並不總是存在 – Mikhaili

+1

從PHP你可以很容易地使用json而不是'#',並在你的客戶端轉換爲json對象的一行(對於json,你也有一個很好的從谷歌的lib gson) – Mikhaili

回答

2

嘗試爲使用Pattern.compile分割您當前字符串:

String your_string = "4#2012-11-06#test1#test2"; 
Pattern pattern = Pattern.compile("#"); 
String[] strarray =pattern.split(your_string); 

的處理如果數組索引包含空字符串修改代碼爲:

for (int i = 0; i < val.length; i++) 
     { 
    String your_string =val[i]; 
    Pattern pattern = Pattern.compile("#"); 
    String[] strarray =pattern.split(your_string); 

    for(int j=0;j<strarray.length;j++){ 
     if(strarray[j].trim().length() >0){ 

     System.out.println("arr"+j+"::" + strarray[j]); 
     } 
     else{ 

     } 
    } 
} 
+0

看到我的編輯答案爲了處理null,你必須檢查數組索引,如果它包含null或任何其他值之前使用它 –

+1

TextUtils.isEmpty(arr [0])更安全:)或打印你可以使用循環(索引 Mikhaili