2012-09-12 14 views
14

Ho un progetto Android (com.appocaliptic.quizknife.app) che utilizza la libreria Android (com.appocaliptic.quizknife.core).Android - getIdentifier restituisce sempre 0 (libreria + applicazione)

Quello che sto cercando di fare è ottenere l'id risorsa dell'immagine che è la libreria. Il percorso dell'immagine è: res/drawable-xhdpi/fr_200_133.png

Tuttavia, tutti i tentativi con risultato getIdentifier 0. Dov'è il 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"); 

Modificato:

Ach, in R.java c'è attributo drawable e corensponding.

+0

Il sistema su cui si sta verificando ha uno schermo con risoluzione xhdpi? – Squonk

+1

@Squonk - Questo non dovrebbe importare quando si tratta di recuperare l'id stesso; solo nel recuperare il drawable associato all'id. Inoltre, per risorse estraibili, il sistema troverà la [migliore corrispondenza] (http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch), quindi utilizzerà la risorsa xhdpi (dopo ridimensionamento) anche su un dispositivo LDAP. –

+0

@TedHopp: Sì d'accordo - ho dimenticato la migliore corrispondenza per le risorse estraibili. – Squonk

risposta

26

Non si dovrebbe utilizzare il nome del pacchetto della libreria. Prova a modificare:

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

(o getContext().getPackageName() se questo è in esecuzione in una vista).

+0

wow, funziona O_o. Grazie mille - btw - qualche fonte di queste informazioni? Tutte le risorse che ho trovato suggerivano l'uso del nome del pacchetto String. Grazie. – bluszcz

+2

@bluszcz - Penso di aver colto quell'idioma da un esempio da qualche parte. La chiave è che è necessario utilizzare il nome del pacchetto dell'app (come elencato nel file manifest) piuttosto che il nome del pacchetto della libreria (che in realtà scompare durante la creazione dell'app). –

+0

Credo che dovresti postare il tuo commento insieme alla risposta - questa è un'informazione molto cruciale;) – bluszcz

27

Ho affrontato lo stesso problema: "Risultato getIdentifier 0" e ho risolto rimuovendo estensione di immagine (* .jpg, * .jpeg, ... ecc) per essere corrispondere al nome in quanto in R. java file di

10

mi è stato sempre lo stesso errore e l'unica cosa che ha funzionato è stato andando su di esso in un modo diverso:

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

ho avuto un problema simile. Potrei risolverlo in modo simile a ciò che menziona Hussam Otri. Ad esempio:

//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()); 
Problemi correlati