2012-12-06 125 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