2012-09-12 32 views
14

Mam projekt Androida (com.appocaliptic.quizknife.app), który korzysta z biblioteki Android (com.appocaliptic.quizknife.core).Android - getIdentifier zawsze zwraca 0 (biblioteka + aplikacja)

Co próbuję zrobić, to uzyskać identyfikator zasobu obrazu, który jest biblioteką. Ścieżka do obrazu: res/drawable-xhdpi/fr_200_133.png

Jednak wszystkie próby z wynikiem getIdentifier 0. Gdzie jest 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"); 

Zmieniano:

Ach, aw R.java istnieje atrybut odkształcalne i corensponding.

+0

Czy system, na którym to testujesz ma ekran z rozdzielczością xhdpi? – Squonk

+1

@Squonk - To nie powinno mieć znaczenia, jeśli chodzi o pobieranie samego identyfikatora; tylko przy pobieraniu losowania powiązanego z identyfikatorem. Poza tym, dla zasobów losowanych, system znajdzie [najlepsze dopasowanie] (http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch), więc użyje zasobu xhdpi (po skalowanie) nawet na urządzeniu ldpi. –

+0

@TedHopp: Tak, zgodziłem się - zapomniałem o najlepszym dopasowaniu zasobów do losowania. – Squonk

Odpowiedz

26

Nie powinieneś używać nazwy pakietu biblioteki. Spróbuj to zamiast:

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

(lub getContext().getPackageName() jeśli ten jest wykonywany w widoku).

+0

wow, działa O_o. Wielkie dzięki - przy okazji - jakiekolwiek źródło tych informacji? Wszystkie zasoby, które uważałem za sugerujące, używają nazwy pakietu String. Dzięki. – bluszcz

+2

@bluszcz - Myślę, że wziąłem ten idiom z jakiegoś przykładu. Kluczem jest to, że musisz użyć nazwy pakietu aplikacji (jak podano w manifeście), a nie nazwy pakietu biblioteki (która faktycznie znika podczas tworzenia aplikacji). –

+0

Wierzę, że powinieneś zamieścić swój komentarz wraz z odpowiedzią - to bardzo ważne informacje;) – bluszcz

27

I w obliczu tego samego problemu: "Wynik getIdentifier 0" i rozwiązać go przez usunięcie rozszerzenia obrazu (* .jpg, * .jpeg, etc ...), aby być zgodna z nazwą jak to w R. java plik

10

byłem coraz ten sam błąd i jedyną rzeczą, która pracowała szło o to w inny sposób:

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

miałem podobny problem. Mógłbym rozwiązać go podobnie do tego, o czym wspomina Hussam Otri. Na przykład:

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