2013-08-14 9 views
0

я не имею ни малейшего понятия, почему я получаю StringIndexOutOfBoundExeption в данный момент:StringIndexOutOfBoundException по неизвестной причине

for (int i = start; i < dataList.size() - 6 
& dataList.get(i + 1).toString().substring(1).equals(lineNumber) 
& !dataList.get(i + 1).toString().substring(1) 
         .equals("LIST_END"); i += 6) 
      { 
      if (!dataList.get(i).toString().contains("null")){ 
       shortList.add(dataList.get(i).toString()); } 
      else {shortList.add("");} 

      if (!dataList.get(i+1).toString().contains("null")){ 
       shortList.add(dataList.get(i + 1).toString());} 
      else {shortList.add("");} 

      if (!dataList.get(i+2).toString().contains("null")){ 
       shortList.add(dataList.get(i + 2).toString());} 
      else {shortList.add("");} 

      if (!dataList.get(i+3).toString().contains("null")){ 
       shortList.add(dataList.get(i + 3).toString()); } 
      else {shortList.add("");} 

      if (!dataList.get(i+4).toString().contains("null")){ 
       shortList.add(dataList.get(i + 4).toString()); } 
      else {shortList.add("");} 

Это внутри цикла, который добавляет данные из этого ArrayList:

[null, 00010, 2013, 2.0, null, и так далее , Как вы можете видеть, первый и пятый элементы равны нулю.

Когда я проверяю первый элемент, если он содержит null, он выбрасывает Исключение. Когда я проверяю пятый элемент, если он содержит null, он не отображает пустую строку " " в пользовательском интерфейсе.

В чем причина этого?

И если я комментирую инструкцию if для первого элемента, мой пользовательский интерфейс показывает мне null. (Это код из моего приложения Android, в TextView, который отображает первый элемент из ArrayList дисплеев null)

EDIT:

ответы на все комментарии:

dataList.size является переменной величиной, в этом случае 7

да, данные из интерфейса SAP, но курсор не используется

условие добавлен

здесь является сообщением об ошибке:

08-14 11: 45: 01,725: Е/Запрос (18465): java.lang.StringIndexOutOfBoundsException: длина = 0; Индекс = 1, , указывающего на линии, если условия первого элемента

* EDIT2: *

Опять же, чтобы указать мою проблему:

я сталкиваюсь:

08-14 11: 45: 01.725: E/Request (18465): java.lang.StringIndexOutOfBoundsException: length = 0; index = 1

Но почему? В моем массиве есть данные, а для пятого элемента - то же самое условие. Почему это вызывает ошибку в первом, если условие (в соответствии с моим Вход)

+0

распечатать размерListList. –

+0

Почему использование содержит? Попробовали ли вы использовать «равные»? –

+0

@ Нико, почему вы положили тег Android? – giorashc

ответ

0

Хорошо, я, наконец, нашел ошибку, спасибо всем!

ошибка была вызвана .substring (1), но не по той причине, что я пытался получить доступ к несуществующему массиву.

Как я уже говорил, ошибка не происходит, когда я удаляю первый Условный оператор

if (!dataList.get(i).toString().contains("null")) 

Все в этом цикле работает отлично, даже замену null на "".

Так позже, хочет удалить [, если передняя часть первого атрибута, поэтому я использую

.substring(1) 

, которые, конечно, в настоящее время не удается, по той причине, строка теперь "".

Я не видел этого, потому что, как я упоминаю в своем вопросе и комментариях, мой журнал указывает на цикл, который я опубликовал. И когда я попытался отладить код, программа выйдет на этом этапе.

Я не могу сказать вам причину, почему это происходит, но, по крайней мере, я знаю, что вызвало ошибку.

+0

Он должен сбой при' if (! DataList.get (i + 4) .toString(). Contains ("null "))' тоже, если ваш ArrayList is [[null, 00010, 2013, 2.0, null, ...] ' – SpongeBobFan

+0

Нет, потому что я пытаюсь получить доступ к первому элементу с' .substring (1) 'еще раз позже, после Я заменил 'null' на' '' '. Но не пятый элемент. Поскольку первый элемент имеет скобку String '[', и 'я хочу удалить его. –

3

код вызывает проблему, скорее всего, условие в for высказыванием:

dataList.get(i + 1).toString().substring(1)

Это условие будет бросаться StringIndexOutOfBoundsException: length=0; index=1, когда dataList.get(i + 1).toString() возвращает пустую строку.

+0

Я тоже так. Но как только я удалю первое if-condition 'if (! DataList.get (i) .toString(). Contains (" null ")', он работает, а null, являющийся пятым элементом, заменяется на «Или я просто ничего не получаю? И Logcat также указывает на эту строку ... И для размера ArrayList имеет размер 7.' start'is 0, поэтому это не должно быть проблемой? !Опять же, если я просто глуп, чтобы понять, что случилось, скажите, пожалуйста. –

+0

И когда вы его отлаживаете, какое значение имеет 'dataList.get (i + 1)' перед тем, как оно выдает исключение? –

+0

'i' равно 0, поэтому оно должно быть 1, затем оно переходит в исключение. –

0

Если dataList.get(0) является null, вы не можете назвать toString() для него, потому что нет ни одного объекта, так что нет никакого способа toString() позвонить. Но я не думаю, что это java.lang.StringIndexOutOfBoundsException. В любом случае, вы должны проверить на другим способом - if (dataList.get(i) != null)

+0

Вы правы, но в этом случае 'null' является строкой, поэтому я проверяю значение' "null" '. Я знаю, что вы пытаетесь объяснить. Но это не нуль, стоящий для пустого и вызывающий NullPointerException, а просто String, который является «нулевым». По этой причине я получаю данные от интерфейса. –

+0

@AndroidRookie, вам нужно выяснить, какая часть 'dataList.get (i) .toString() содержит (" null ")' генерирует исключение. Я думаю, что трассировка стека и некоторые вызовы 'System.out.println()' могут помочь вам с этим – SpongeBobFan

+0

Я больше не хочу. Поскольку я добавил оператор if в указанную строку, чтобы проверить, является ли строка '' '', перед попыткой '.substring (1)' все это работает. Но спасибо за ваши усилия, чтобы помочь мне с этим;) –

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