2011-02-08 4 views
3

У меня есть вызовЗачем возникает исключение resources.getStringArray (int)?

Resources resources = Resources.getSystem(); 
String[] networkFiles = resources.getStringArray(R.array.xmlNetworkFiles); 

и я знаю, что этот массив ресурсов существует (так как я могу сослаться на него с автоматическим сгенерированным файлом R), но тем не менее он продолжает бросать ResourceNotFoundException.

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

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

ответ

5

Это потому, что Resources.getSystem() возвращает неправильный объект Resources. Из документации:

Возвращение глобальной разделяемые ресурсы объекта, который предоставляет доступ только системных ресурсов (без применения ресурсов) и не настроен на текущий экран (не может использовать размерные единицы, делает не изменяется на основе по ориентации и т. д.).

Так как R.array.xmlNetworkFiles - это определенное значение ресурса для вашего приложения, вы запрашиваете системный ресурс и его не найдете.

Используйте getResource() (из подкласса Activity) или getContext().getResources() (из класса View).

2
Resources resources = getResources(); 
String[] networkFiles = resources.getStringArray(R.array.xmlNetworkFiles); 

Попробуйте это, я думаю, это может решить вашу проблему.

+0

Это не будет работать, если класс не является подклассом Activity или Service – bla0009