2012-09-12 36 views
14

Tengo un proyecto de Android (com.appocaliptic.quizknife.app) que usa la biblioteca de Android (com.appocaliptic.quizknife.core).Android - getIdentifier siempre devuelve 0 (biblioteca + aplicación)

Lo que estoy tratando de hacer es obtener la identificación de recursos de la imagen que es la biblioteca. La ruta a la imagen es: res/drawable-xhdpi/fr_200_133.png

Sin embargo, todos los intentos con el resultado getIdentifier 0. ¿Dónde está el problema?

resId = getResources().getIdentifier("fr_200_133", "drawable", "com.appocaliptic.quizknife.core"); 
resId = getResources().getIdentifier("com.appocaliptic.quizknife.core:drawable/"+"fr_200_133", null, null); 
resId = getResources().getIdentifier("drawable/fr_200_133", null, "com.appocaliptic.quizknife.core"); 

Editado:

Ach, y en R.java existe atributo estirable y corensponding.

+0

¿Tiene el sistema que está probando esto una pantalla con resolución xhdpi? – Squonk

+1

@Squonk - Eso no debería importar cuando se trata de recuperar la identificación en sí; solo al recuperar el dibujo asociado con el ID. Además, para recursos dibujables, el sistema encontrará la [mejor coincidencia] (http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch), por lo que utilizará el recurso xhdpi (después de escalado) incluso en un dispositivo ldpi. –

+0

@TedHopp: Sí, de acuerdo: me olvidé de la mejor coincidencia para recursos dibujables. – Squonk

Respuesta

26

No debe utilizar el nombre del paquete de la biblioteca. Tal vez puedas probar:

resId = getResources().getIdentifier("fr_200_133", "drawable", getPackageName()); 

(o getContext().getPackageName() si esto se está ejecutando en una vista).

+0

wow, funciona O_o. Muchas gracias, por cierto, ¿alguna fuente de esta información? Todos los recursos que encontré que sugirieron usar el nombre del paquete String. Gracias. – bluszcz

+2

@bluszcz - Creo que recogí ese modismo de un ejemplo en alguna parte. La clave es que debe usar el nombre del paquete de la aplicación (como se detalla en el manifiesto) en lugar del nombre del paquete de la biblioteca (que en realidad desaparece al crear la aplicación). –

+0

Creo que debería publicar su comentario junto con la respuesta; esta es información crucial;) – bluszcz

27

que se enfrentaron al mismo problema: "número getIdentifier 0" y Lo resuelto mediante la eliminación de extensión de imagen (* .jpg, * .jpeg, etc ...) para ser igual al nombre que en R. java archivo

10

que estaba recibiendo el mismo error y lo único que funcionó fue ir sobre él de una manera diferente:

resourceId = R.drawable.class.getField("fr_200_133").getInt(null); 
1

que tenía un problema similar. Podría resolverlo de manera similar a lo que Hussam Otri menciona. Por ejemplo:

//This doesn't work 
context.getResources().getIdentifier("audio_1.mp3", "raw", this.getPackageName()); 

//This works (strip off the file extension) 
context.getResources().getIdentifier("audio_1", "raw", this.getPackageName()); 
Cuestiones relacionadas