Отримання 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. у затемненні перейдіть до Проект> Очистити ...
  2. виберіть свій проект, а потім натисніть OK
  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

1
Цікаво, у чому різниця між valueOf (i) та "" + i?
петерб

Зовсім несподівано, чудовий улов! Дякую
gunjot singh

1
Як щодо коду XAML, як я можу встановити значення. У моєму випадку слід встановити десяткове значення для властивості на XAML
zquanghoangz

2
Дякуємо, причина в тому, що setText - це перевантажений метод, який приймає і String, і ідентифікатор ресурсу. Потім ви
передаєте

12

Оскільки ви встановлюєте макет явно, можливо, ви захочете спробувати помістити його в папку за замовчуванням / макет, а не в / 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 = "direction | keyboardHidden" android: name = "abcActivty" />
mbwasi

9

Спробуйте перемістити ваш макет XML з res/layout-landв res/layoutпапці


до папки макета?
Роберт

1
з res / layout-land >> папка res / layout
Ашіш Кумар

Також зі мною трапилося кілька разів
Маркос Євлогіменос

Я переїхав мій XML з res/layout-sw600dpв res/layoutтой працювали .. Спасибі за ваш анс ..
Шайлендра Мадд

2

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


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

2

Я отримав цю помилку з ще однієї причини:

У мене був файл, res/xml/data.xmlі я намагався завантажити його з Resourcesкласом так:

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

Однак це неправильно як метод Resources.getSystem() повертає глобальний об'єкт спільних ресурсів, що забезпечує доступ лише до системних ресурсів.

Правильний спосіб такий (зсередини Діяльність):

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

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

2

У моєму випадку моя версія інструментів збірки в моєму build.gradle для модуля програми була застарілою для старого проекту. Оновлення вирішило проблему:

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

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


2

Переконайтеся, що імпорт правильний. У мене була подібна проблема, коли я Rвказував на системний Rфайл Android , а не на мій локальний.


1

Я видалив папки buildвсередині проекту. Після очищення та відновлення його в Android Studio. Потім виправлені помилки в build.gradle та AndroidManifest.


1

Це також може спричинити певні проблеми: Випадково один із моїх макетів був припаркований у моїй папці ресурсів планшета, тож ця помилка з’явилася лише при розташуванні телефону. Розкладка телефону просто не мала відповідного файлу розкладки.

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


Не могли б ви надати більше інформації про це, будь ласка, stackoverflow.com/help/how-to-answer
Rich Benner

0

Переконайтеся, що значення R, на яке ви вказуєте, є правильним. У мене була проблема, дуже подібна до цієї, коли імпорт було вставлено Eclipse, який вказував на файл System R, а не на проект. Потрібно було багато подряпин по голові. Сподіваюся, це допомагає.


0

У вашому xml для орієнтації екрана встановлено альбомну орієнтацію. Якщо ви використовували eclipse для створення цього файлу, він був би створений у папці res / layout-land / folder. Але коли ви відкриваєте активність у портретному режимі, програма шукатиме 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

Будь ласка, додайте деякі деталі та пояснення, щоб підтримати вашу відповідь, щоб це було корисно для інших
Souvik Ghosh

0

Для мене недійсність і перезапуск кешу не працювали. Я видалив папки .idea та .gradle. Якщо ви це зробите, не забувайте, що такі речі, як журнали побудови, або щось може зникнути.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.