Подтвердить что ты не робот

Android - getIdentifier всегда возвращает 0 (библиотека + приложение)

У меня есть проект Android (com.appocaliptic.quizknife.app), в котором используется Android-библиотека (com.appocaliptic.quizknife.core).

То, что я пытаюсь сделать, - это получить идентификатор ресурса, который является библиотекой. Путь к изображению: res/drawable-xhdpi/fr_200_133.png

Однако все попытки с результатом getIdentifier 0. Где проблема?

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

Отредактировано:

Ach, а в R.java имеется атрибут drawable и corensponding.

4b9b3361

Ответ 1

Нельзя использовать имя пакета библиотеки. Вместо этого попробуйте:

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

(или getContext().getPackageName(), если это выполняется в представлении).

Ответ 2

Я столкнулся с той же проблемой: "результат getIdentifier 0" , и я решил его, удалив расширение изображения (*.jpg, *.jpeg,... и т.д.), чтобы соответствовать имени в файле R.java

Ответ 3

Я получал ту же ошибку, и единственное, что работало, происходило по-другому:

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

Ответ 4

У меня была аналогичная проблема. Я мог бы решить это, как это заметил Хусам Отри. Например:

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