Получение android.content.res.Resources $ NotFoundException: исключение, даже если ресурс присутствует в android


89

Пожалуйста, дайте мне знать, где я ошибаюсь, чтобы получить ошибку.

Я создаю приложение, одно из действий которого должно быть только в ландшафтном режиме. Итак, я добавил в файл AndroidManifest.xml следующее:

<activity android:name=".LandScapeImageActivity" android:screenOrientation="landscape"></activity>

Я создал папку вроде

/ res / layout-land

и добавьте в него макет с именем see_today_landscape_layout.

и в onCreate()я добавил следующее

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.see_today_landscape_layout);
....
}

Но когда я запускаю свое приложение, я получаю следующую ошибку

02-06 13:46:14.358: E/AndroidRuntime(13286): FATAL EXCEPTION: main
02-06 13:46:14.358: E/AndroidRuntime(13286): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mid.kew.activities/com.mid.kew.activities.LandScapeImageActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f03002b
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2787)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2803)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4066)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.access$2400(ActivityThread.java:135)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2140)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.os.Looper.loop(Looper.java:144)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.main(ActivityThread.java:4937)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at java.lang.reflect.Method.invokeNative(Native Method)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at java.lang.reflect.Method.invoke(Method.java:521)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at dalvik.system.NativeStart.main(Native Method)
02-06 13:46:14.358: E/AndroidRuntime(13286): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f03002b
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.getValue(Resources.java:892)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.loadXmlResourceParser(Resources.java:1869)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.content.res.Resources.getLayout(Resources.java:731)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.Activity.setContentView(Activity.java:1654)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at com.mid.kew.activities.LandScapeImageActivity.onCreate(LandScapeImageActivity.java:103)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1069)
02-06 13:46:14.358: E/AndroidRuntime(13286):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2751)
02-06 13:46:14.358: E/AndroidRuntime(13286):    ... 12 more

Я пересек, проверил в R.java, и у него есть ресурс с идентификатором 7f03002b, который ищет исключение, и он присутствует там ...

Я очищал и перестраивал проект, скажем, 5 раз, но проблема все равно возникает.

Странно то, что вчера это работало, а сегодня не работает. Код такой же.


К чему относится идентификатор ресурса # 0x7f03002b? Вы должны предоставить содержимое see_today_landscape_layout.xmlфайла.
а.х.

да, это относится к see_today_landscape_layout.xml согласно R.java
Nik


У меня была эта проблема при обновлении до использования, compile 'com.android.support:appcompat-v7:23.4.0'если я остаюсь с v7:22.2.0'ней, работает
Стивен

Ответы:


36
  1. в eclipse перейдите в Project> Clean ...
  2. выберите свой проект, затем нажмите ОК
  3. перезапустить приложение

если это произойдет снова, удалите файл r.java. он сгенерируется автоматически.


2
как я уже упоминал ранее ... Я очистил папки bin и gen и перестроил приложение ... все еще не работает ...
Nik

128
Если это не устранило вашу проблему, почему она была отмечена галочкой?
IcedDante

1
что делать, если это происходит в приложении выпуска?
Динеш

220

Для моего состояния причиной был intпараметр для TextView. Позвольте мне показать пример

int i = 5;
myTextView.setText(i);

получает информацию об ошибке выше.

Это может быть исправлено путем преобразования intв Stringэто нравится

myTextView.setText(String.valueOf(i));

Когда вы пишете int, он ожидает ресурс, а не текст, который вы пишете. Так что будьте осторожны на устанавливая intкак Stringв Android.


Спасибо, сработало, я пытался сделать вот так: num2.setText (lotteryCharacters.charAt (2));, затем я перешел на num2.setText (String.valueOf (lotteryCharacters.charAt (2))); ... и это сработало!
TharakaNirmana 08

1
Интересно, в чем разница между valueOf (i) и "" + i?
петербург

Совершенно неожиданно, отличный улов! Спасибо
Gunjot Singh

1
Как насчет кода XAML, как я могу установить значение. В моем случае следует установить десятичное значение для свойства в XAML
zquanghoangz

2
Спасибо, причина в том, что setText - это перегруженный метод, который принимает как String, так и идентификатор ресурса. Затем вы передаете int, он ищет идентификатор ресурса
abedfar

12

Поскольку вы явно задаете макет, вы можете попробовать поместить его в папку default / layout, а не в / layout-land, поскольку это если вы хотите, чтобы Android автоматически обрабатывал поворот за вас.


1
Если телефон находится в портретной ориентации, он будет в портретной ориентации, при повороте телефона он будет в альбомной ориентации. Вы пытаетесь сделать это всегда пейзажем? Затем вам нужно установить ориентацию активности на альбомную в файле манифеста или в коде, см. Этот вопрос stackoverflow.com/questions/2150287/…
mbwasi

Я сделал это, как я уже упоминал в своем вопросе '<activity android: name = ". LandScapeImageActivity" android: screenOrientation = "landscape"> </activity>'
Ник

1
вам не хватает части configchanges <activity android: screenOrientation = "landscape" android: configChanges = "Ориентация | keyboardHidden" android: name = "abcActivty" />
mbwasi


2

Это может произойти из-за другого языка в телефоне, для которого в вашем коде нет ресурса. Например, ваш файл preference.xml помещен в xml-en, и вы пытаетесь запустить приложение на телефоне, на котором выбран французский язык, приложение выйдет из строя.


Всегда создавайте папки ресурсов по умолчанию, а затем добавляйте те, которые зависят от языка или ориентации. Хотя здесь может быть так, а может и нет :)
Ахмад Али Насир

2

Я получил эту ошибку по другой причине:

У меня был файл, res/xml/data.xmlи я пытался загрузить его с помощью Resourcesтакого класса:

Resources.getSystem().getXml(R.xml.data);

Однако это неверно, поскольку метод Resources.getSystem()возвращает глобальный объект общих ресурсов, который предоставляет доступ только к системным ресурсам.

Правильный способ выглядит следующим образом (изнутри Activity):

this.getResources().getXml(R.xml.data);

Как тогда получить доступ к ресурсам из функций или классов верхнего уровня, которые не наследуются от Activity?
Вивек Ядав,

2

В моем случае моя версия Build Tools в моем build.gradle для модуля приложения устарела в старом проекте. Обновление устранило проблему:

android {
    ...
    buildToolsVersion "19.0.1"
    ...

Обновился до последней версии инструментов сборки (25.0.1) и синхронизировал проект, и все снова стало хорошо.


2

Убедитесь, что ваш импорт правильный. У меня была аналогичная проблема, когда я Rуказывал на системный Rфайл Android , а не на мой локальный.


1

Я удалил папки buildвнутри проекта. После почистил и перестроил в Android Studio. Потом исправили ошибки в build.gradle и AndroidManifest.


1

Это также может вызвать некоторые проблемы: случайно один из моих макетов был припаркован в папке ресурсов планшета, поэтому я получил эту ошибку только с макетом телефона. В макете телефона просто не было подходящего файла макета.

Я снова работал после перемещения файла макета в правильную стандартную папку и следующей перестройки проекта.


Не могли бы вы предоставить дополнительную информацию по этому поводу,
Рич Беннер,

0

Убедитесь, что буква R, на которую вы указываете, является правильной. У меня была проблема, очень похожая на эту, когда Eclipse вставлял импорт, который указывал на файл System R, а не на проект. Потребовалось много чесать голову. Надеюсь это поможет.


0

В вашем xml-файле установлена ​​альбомная ориентация экрана. Если вы использовали eclipse для создания этого файла, он был бы создан в папке res / layout-land /, но когда вы открываете активность в портретном режиме, приложение будет искать xml в папке res / layout-port / или в обычном res / layout / . Если у вас не было xml для портретного режима, ваше приложение выйдет из строя.


0

Я исправил это следующим образом:

Создайте папку в названии каталога ресурсов "drawable-nodpi" а затем переместите все ресурсы в этом каталоге из другого каталога с возможностью рисования.

Теперь очистите свой проект, а затем перестройте. Запустите снова, надеюсь, на этот раз он сработает без исключения ресурса, который не найден.


Это указывало мне на верный путь, но, пожалуйста, помните об этом сообщении: stackoverflow.com/questions/24682094/…
Адриан

0

Я получил эту ошибку, когда пытался получить доступ к данным Bundle из One Intent с помощью getInt ("ID").

Я решил это с помощью getString ("ID").

Из Activity1 у меня было

Intent intent=new Intent(this,ActivityB.class);
intent.putExtra("data",data)// 
startActivity(intent);

На мероприятии B,

Bundle bundle=getIntent().getExtras();
if(extras!=null){
// int x=extras.getInt("Data"); This Line gave me error int 
x=Integer.parseInt(extras.getString("Data")); // This solved the problem.
}

1
Обновите свой ответ, чтобы объяснить, как это решает проблему и улучшает принятые и одобренные ответы на этот вопрос 5-летней давности. См .: Как написать хороший ответ .
FluffyKitten

Пожалуйста, подумайте о добавлении некоторых деталей и пояснений, чтобы поддержать свой ответ, чтобы он был полезен другим
Сувик Гош

0

Для меня аннулирование кеша и перезапуск не сработали. Я удалил папки .idea и .gradle. Если вы сделаете это, не забывайте, что такие вещи, как журналы сборки или что-то еще, могут исчезнуть.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.