Ответ 1
Итак, это выглядит как
int id = ressources.getIdentifier(title, "string", "com.package" );
возвращает 0
, то есть не может найти указанный ресурс. Последующий вызов ressources.getIdentifer()
вызывает исключение, поскольку 0
не является допустимым идентификатором ресурса.
Вот несколько отладочных/альтернативных идей:
-
Вы, наверное, уже сделали это десяток раз, но это не помешает упоминать: сначала перепроверьте написание всего:
- правильность написания пакетов (как в проекте библиотеки, так и в проекте клиента),
- строка ресурса верна (проект библиотеки и клиентский проект),
- правильно написана библиотека в элементе
uses-library
AndroidManifest.xml
, - и др.
- Можно ли получить доступ к любым ресурсам в этой библиотеке или является проблемой, специфичной для этого ресурса (
title
), или она специфична для этого типа ресурсов (строк)? Можете ли вы получить доступ к ресурсам другой библиотеки?
- Вы получаете доступ к библиотеке как файл jar? Вы можете jar код, но вы не можете получить доступ к ресурсам из банки.
Android. Возможно ли создать пользовательскую библиотеку для использования в нескольких приложениях?
- Вы пробовали альтернативный формат имени:
код
String fullyQualifiedResourceName = "com.package:string/sample";
int id = ressources.getIdentifier(title, null, null);
if (id == 0) {
Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed";
// graceful error handling code here
}
- Вы можете попробовать использовать отражение:
код
final String resourceName= "sample";
final int id;
try {
final Class resourceType = com.package.R.string.class;
final Field field = resourceType.getField(title);
id = field.getInt(null);
} catch (final Exception e) {
Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed";
// graceful error handling code here
}
Android, получив идентификатор ресурса из строки?
http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html