2012-09-12 12 views
14

Ich habe Android-Projekt (com.appocaliptic.quizknife.app), die Android-Bibliothek (com.appocaliptic.quizknife.core) verwendet.Android - getIdentifier gibt immer 0 (Bibliothek + Anwendung)

Was ich versuche zu tun, ist Ressource-ID des Bildes, das die Bibliothek ist. Pfad zum Bild ist: res/drawable-xhdpi/fr_200_133.png

Jedoch alle Versuche mit getIdentifier Ergebnis 0. Wo ist das Problem?

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"); 

Edited:

Ach, und in R.java gibt es ziehbar und corensponding Attribut.

+0

Hat das System, das Sie gerade testen, einen Bildschirm mit xhdpi-Auflösung? – Squonk

+1

@Squonk - Das sollte nicht wichtig sein, wenn es darum geht, die ID selbst abzurufen; nur beim Abrufen des mit der ID verknüpften Zeichensatzes. Außerdem wird das System für ausschreibbare Ressourcen die [beste Übereinstimmung] finden (http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch), so dass es die xhdpi-Ressource (nach Skalierung) sogar auf einem LDPI-Gerät. –

+0

@TedHopp: Ja einverstanden - Ich habe die beste Übereinstimmung für ausklappbare Ressourcen vergessen. – Squonk

Antwort

26

Sie sollten den Namen des Bibliothekspakets nicht verwenden. Versuchen Sie stattdessen:

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

(oder getContext().getPackageName(), wenn dies in einer Ansicht ausgeführt wird).

+0

wow, es funktioniert O_o. Vielen Dank - übrigens - jede Quelle dieser Information? Alle Ressourcen, von denen ich annahm, dass sie vorgeschlagen wurden, verwenden den Namen des String-Pakets. Danke. – bluszcz

+2

@bluszcz - Ich denke, ich habe dieses Idiom aus einem Beispiel irgendwo aufgegriffen. Der Schlüssel ist, dass Sie den Paketnamen der App (wie im Manifest aufgelistet) anstelle des Paketnamens der Bibliothek verwenden müssen (der beim Erstellen der App tatsächlich verschwindet). –

+0

Ich glaube, du solltest deinen Kommentar zusammen mit der Antwort posten - das sind sehr wichtige Informationen;) – bluszcz

27

stand ich vor dem gleichen Problem: "getIdentifier Ergebnis 0" und ich löste es durch Bild Erweiterung zu entfernen (* .jpg, * .jpeg, ... etc), wie es der Name sein Match R. in java Datei

10

ich den gleichen Fehler und das einzige, was immer die über sie in einer anderen Art und Weise vorging gearbeitet:

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

ich hatte ein ähnliches Problem. Ich könnte es ähnlich lösen wie Hussam Otri. Zum Beispiel:

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