2016-05-12 2 views
1

Я пытаюсь добавить кучу ссылочных ссылок на список, и мне нужно изменить число в ссылочной ссылке, поскольку каждый из них относится к другому элементу. Я попытался следующим образом:NumberFormatException- Invalid Int

for(int x=69;x<222;x++){ 
      urls.add(x,Integer.parseInt("R.drawable.item"+(x+1)+"_lock"); 
     } 

и во время работы он производит NumberFormatException ошибку: java.lang.NumberFormatException: Invalid int: "R.drawable.item70_lock"

Это правильный путь о том, что я пытаюсь сделать, или есть другой способ?

+0

Integer.parseInt() пытается получить значение Integer, которое написано в строке. Integer.parseInt («123»), следовательно, вернет 123. Alltho R.drawable.item123 - это не что иное, как уникальный идентификатор Integer для drawable, Integer.parseInt («R.drawable.item123») вернется в этом исключении, потому что «R.drawable.item123» не является числом. – MojioMS

+2

Почему, по-вашему, * text * '" R.drawable.item70_lock "' является числом? – Andreas

ответ

1

прибудете ресурсов идентификаторы динамически:

for(int x=69;x<222;x++){ 
    int id = getResources().getIdentifier("item" + (x+1) + "_lock", "drawable", getPackageName()); 
    if(id != 0) 
     urls.add(x, id); 
} 
+0

Это анти-шаблон, к ресурсам не следует обращаться таким образом. – Kelevandos

+0

ссылка на анти-шаблон пожалуйста –

+0

Как статья? У меня нет, я говорю по опыту. Сначала это сработает нормально, но привносите некоторые из них или логику генерации Gradle, и это станет неустойчивым. Ресурсы в Android являются статическими и должны быть доступны со статическими, сгенерированными идентификаторами класса 'R'. – Kelevandos

0

Это не так, как Android работа ресурсы :)

указатель Во-первых, ресурс фактически является константой INT, а не String. R.drawable.item_1_lock - это полевое в автогенерируемом классе R.

Во-вторых, Integer.parseInt() используется для изменения числовой строки в действительный тип примитива. Поэтому, если вы вызываете его с помощью параметра «1» , то вы получаете значение int со значением 1.

Проблема заключается в том, что вы пропускаете номер String. Он не может быть превращен в число, поэтому генерируется исключение.

И, наконец, вы не можете создать указатель ресурса во время выполнения. Они автоматически генерируются и подвержены изменениям, поэтому вы не должны генерировать их, как указано выше. Создайте int[], поместите в него возможные ресурсы и получите его с помощью x, который вы итерации :-)

+0

Является ли неправильным представление о том, что ссылка 'R.drawable.XXX' просто ссылается на имя файла XXX? – ez4nick

+0

R.drawable.XXX является статическим полем в классе под названием 'R', а не строковым идентификатором :-) – Kelevandos

+0

И он ссылается на ресурс с именем XXX, но вы не можете получить к нему доступ, как вы пытались. Не с помощью String вам нужно использовать идентификаторы, сгенерированные в R-классе (которые являются автоматически сгенерированными ints). – Kelevandos

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