2013-11-29 2 views
-5

У меня есть код, как это:Почему мой код дает NumberFormatException?

int [] arrayOfImages = new int[namesOfSubjectsColorCode.size()]; 
    int y = 0;  
     for (int x = 0 ; x<namesOfSubjectsColorCode.size();x++) { 
      nameOfColorCode = namesOfSubjectsColorCode.get(x); 
      String str = "com" + "." + "nyurals" + "." + "R" + "." + "drawable" + "." + nameOfColorCode; 
      arrayOfImages[y] = Integer.parseInt(str); 
      // Integer.parseInt(str); 
      y++; 
     } 

Здесь я создал целочисленный массив. Затем я создал строку и, используя Integer.parseInt(), хочу преобразовать ее в int так, чтобы мой массив integer должен генерировать динамически. Он дает NumberFormatException.

Пожалуйста, предложите мне решение.

+0

Потому что «com.nyurals.R.drawable ..» не является целым. –

+0

Вы ожидаете, что он найдет этот ресурс ... этого не произойдет. –

+0

Вы можете предложить любое решение .. beacause, у меня есть цветовой код для 10 предметов, поступающих из Webservices, и я должен сопоставить это с изображением ресурса R.drawable. Пожалуйста, предложите дорогой друг ... – user2890202

ответ

1

Аргументом для Integer.parseInt() является недействительным, вы не можете передать ему строку, как "com.nyurals .." и т.д.

Из документов:

public static int parseInt(String s) 
       throws NumberFormatException 

Анализирует строку аргумент как знаковое десятичное целое число. Символы в строке должны быть десятичными цифрами, за исключением того, что первым символом может быть знак минус ASCII «-» («\ u002D»), чтобы указать отрицательное значение или знак ASCII плюс «+» («\ u002B») для указания положительного значения. Полученное целочисленное значение возвращается точно так же, как если бы аргумент и radix 10 были указаны как аргументы метода parseInt (java.lang.String, int).

И это именно то, что вы получаете: NumberFormatException.

EDIT:

Вы, вероятно, хотите сделать что-то вроде этого:

nameOfColorCode = namesOfSubjectsColorCode.get(x); 
String str = "" + nameOfColorCode; 

int resourceId = this.getResources().getIdentifier(str, "drawable", this.getPackageName()); 

arrayOfImages[y] = resourceId; 
y++; 
1

Там нет никакого способа для этого String быть разумно превращена в int.

String str = "com" + "." + "nyurals" + "." + "R" + "." + "drawable" + "." + nameOfColorCode; 

Нечто подобное можно было бы ожидать:

String str = "1"; 
1

Это очевидно, что это дает вам NumberFormatException. Посмотрите на свой код:

Ваша переменная str содержит String, которая не может разделить на целое значение.

0

Integer.parseInt() рассчитывает получить целое число, а не строку формата com.nyurals.R.drawable.<<nameOfColorCode>>.

Как правило, в Android, вы бы получить доступ к переменным непосредственно с чем-то вроде:

R.drawable.SomeName 

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

Например, следующий код получает вид поверхности на основе ID:

SurfaceView sv = (SurfaceView)findViewById(R.id.PfrRightAntiView); 

Если вы сделать необходимость динамически извлекаться ресурс, основанный на струне известной только во время выполнения, смотрите в Resources.getIdentifier(), пример которого можно найти here.

Согласно this article, этот способ может быть не самым быстрым. Возможно, лучше использовать метод отражения, как показано в этой ссылке.

0

Если вы хотите получить Int (ID) ресурса, чем вы должны использовать

Resources res = activity.getResources(); 
res.getIdentifier("name","resourceType",activty.getPackageName()); 

изменить имя с реальным именем и ResourceType с фактическим типом ресурса (вытяжка, цветом и т.д.); Как вы уже писали, у вас нет int в вашей строке, это просто int, а не ссылка на resoruce

0

Вы можете получить доступ к константам, которые вы пытаетесь использовать, через http://docs.oracle.com/javase/tutorial/reflect/, но вы действительно не хотите сделай это.

Вы бы лучше служил сдачи INT в той или иной форме карты из которых вы можете выбрать какой-то подгруппы в зависимости от изменения информации

0

Пусть ваши ул возвращает нулевое значение, так Integer.parseInt (нуль) возвращает номер format exception

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