2014-02-21 3 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)); 
} 

За исключением:

Invalid индекс 0, размер равен 0.

Интересно, как это возможно, так как у меня нет проблем с добавлением externalPaths, но с internalPaths есть эта ошибка.

+0

Как вы объявляете запятые? ??? –

+0

Вы уверены, что ваш код в курсе. Можете ли вы определить точную линию, а не блок, по вине? –

+0

Извините, отредактирован. Теперь это более понятно. – PetoU

ответ

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

Индекс подстроки 0, 8 может вызвать проблемы со строками короче, чем 8 символов. Также вам может понадобиться обработать пустой случай с строкой.

+0

Вызов 'substring()' не вызовет проблем в 'String' длины 7, так как второй параметр является исключительным. – bcsb1001

1

Это происходит сбой именно на части

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

InternalPaths является ArrayList, который инициализируется (не NullPointerException) и его метод add должен добавить элемент в конце массива и не put его в определенном месте (индексированное положение). Поэтому проблема должна быть в конструкторе File. Отлаживаем и проверяем значение path. Уверен, что это пустая строка. Выясните, как его можно инициализировать до такого значения.

Смежные вопросы