2014-02-21 72 views
-1

我有这样的代码无效指数0,大小为0无法添加到ArrayList中

ArrayList<File> internalPaths = new ArrayList<File>(); 
ArrayList<File> externalPaths = new ArrayList<File>(); 

for (int i = 0; i < pathCounter; i++) { 

    Log.e("PK", Integer.toString(pathCounter)); 
    if (i == 0) { 
     // first path 
     String path = pathString.substring(commaPositions[i], 
      commaPositions[i + 1] + 1); 

     if (path.length() > 7 && path.substring(0,8).contains("storage")) { 
      externalPaths.add(new File(path)); 
     } else { 
      internalPaths.add(new File(path)); 
     } 
    } 
} 

它正好没有在部分

else { 
    internalPaths.add(new File(path)); 
} 

,出现异常:

无效索引0,大小为0.

我不知道这是如何可能的,因为我没有问题,增加到externalPaths,但与internalPaths有这个错误。

+0

你如何声明commaPositions? –

+0

你确定你的代码是最新的。你能确定错误的准确路线,而不是阻断吗? –

+0

对不起,编辑。现在更清楚了。 – PetoU

回答

0
if (path.length() > 7 
         && path.substring(0,8).contains("storage")) { 

0,8的子串索引可能会导致字符串短于8个字符的问题。你也可能需要处理空弦的情况。

+0

'substring()'调用在长度为7的“String”上不会引起任何问题,因为第二个参数是独占的。 – bcsb1001

1

它恰好没有上部分

else { 
    internalPaths.add(new File(path)); 
} 

InternalPaths是被初始化一个ArrayList(未一个NullPointerException)及其add方法假设在阵列的端部追加的项目和而不是put它在一个特定的地方(索引位置)。因此,问题应该在File的构造函数中。调试并检查path的值。我敢打赌这是一个空的字符串。弄清楚它如何被初始化为这样的价值。

相关问题