2011-01-19 18 views
16

¿es posible usar recursos como cadenas definidas en proyectos de biblioteca en los proyectos de aplicación? ¿si es así, cómo? porque me parece que no puede resolver las cuerdas me gustaría resolver este aspecto:recursos de importación android del proyecto de biblioteca

String title = "sample"; 
int id = ressources.getIdentifier(title, "string", "com.package"); 

me da esta excepción

WARN/TipoRecurso (278): No identificador del paquete al conseguir valor del número de recursos 0x00000000 WARN/System.err (278): android.content.res.Resources $ NotFoundException: String resource ID # 0x0

la cadena ("muestra") que estoy buscando está definitivamente en este paquete provisto en strings.xml del proyecto de la biblioteca. incluso puedo verlo en R.java

+0

se com.package el paquete definido en sus proyectos de bibliotecas AndroidManifest.xml –

+0

sí lo es. todas las clases están en este paquete. – clamp

Respuesta

14

por lo que parece

int id = ressources.getIdentifier (título, "cadena", "com.package");

está devolviendo 0, lo que significa que no puede encontrar el recurso especificado. La llamada subsiguiente al ressources.getIdentifer() causa la excepción, ya que 0 no es una identificación de recurso válida.

Éstos son algunos de depuración/ideas alternativas:


  • Probablemente ya has hecho esto una docena de veces, pero no se pierde nada de mención: en primer lugar vuelva a comprobar la ortografía de todo:

    • la ortografía del paquete es correcta (tanto en proyecto de biblioteca como en proyecto de cliente),
    • cadena de recursos es correcta (proyecto de biblioteca y proyecto de cliente),
    • es la ortografía correcta de la biblioteca en el elemento uses-library la AndroidManifest.xml,
    • etc.

  • ¿Se puede acceder a los recursos en esa biblioteca o es el problema específico de dicho recurso (title) o es específico para ese tipo de recurso (cadenas)?¿Puedes acceder a los recursos de otra biblioteca?

  • ¿Está accediendo a la biblioteca como un archivo jar? Puede sacudir el código, pero no puede acceder a los recursos desde un contenedor.

Android - Is it possible to create a custom library to use across several applications?


  • ¿Usted intentó el formato de nombre alternativo:

Código

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 
} 

  • Usted podría tratar de usar la reflexión:

Código

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, getting resource ID from string?

http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html

+1

gracias por su respuesta detallada! la biblioteca que estoy usando no es una jarra, es simplemente otro proyecto en eclipse al que me he referido usando las propiedades del proyecto android. el uso de la versión con el nombre de recurso completo proporciona el mismo error. – clamp

+1

la versión con reflexión funcionó de hecho, pero aún me gustaría entender por qué la 'oficial' no. – clamp

+0

@clamp - ¡muy interesante! –

0

Sí, defina los recursos en su proyecto de biblioteca como siempre. A continuación, hágalos referenciar en el proyecto que importa la biblioteca anteponiendo la clase R con el nombre del paquete en el archivo AndroidManifest.xml de la biblioteca.

+0

bien, pero ¿y si quiero obtener la cadena con esta función getResources(). GetString (int id) – clamp

+0

Es exactamente lo mismo que usar la clase R estándar, getResources(). GetSTring (R.string.somestringyouwanttouse) –

+0

gracias , en realidad mi comentario anterior fue incorrecto. Estoy tratando de encontrar la identificación por su nombre. ahora he corregido mi publicación original. – clamp

3

En su código de proyecto, importe la clase R:

import com.application.libraryproject.R

A continuación, puede hacer referencia a cualquier cadena u otro recurso XML definidos así:

String mystring = getString(R.string.app_name);

o similar.

+0

gracias, en realidad mi pregunta era incorrecta. mi problema es, de hecho, obtener el id del recurso, que trato de encontrar usando getIdentifier y su nombre. – clamp

2

tuve un problema similar y lo resuelto con el método getPackageName() dentro de la biblioteca de proyectos .

En su caso, debe ser:

String title = "sample"; 
int id = ressources.getIdentifier(title, "string", getPackageName()); 
+0

Gracias por esa respuesta, ¡ayudó! –

Cuestiones relacionadas