Pobieranie android.content.res.Resources $ NotFoundException: wyjątek, nawet jeśli zasób jest obecny w systemie Android


89

Daj mi znać, gdzie popełniam błąd, aby uzyskać błąd.

Tworzę aplikację, której jedną z czynności jest praca w trybie poziomym. Więc dodałem następujący w pliku AndroidManifest.xml

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

Utworzyłem folder taki jak

/ res / layout-land

i dodaj do niego układ o nazwie see_today_landscape_layout.

aw onCreate()dodałem co następuje

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

Ale kiedy uruchamiam aplikację, pojawia się następujący błąd

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

Przekroczyłem sprawdzone w R.java i ma zasób o numerze ID 7f03002b, którego wyjątek szuka i jest tam obecny ...

Wyczyściłem i odbudowałem projekt powiedzmy 5 razy, ale problem nadal występuje.

Dziwne jest to, że to działało wczoraj i nie działa dzisiaj. Kod jest taki sam.


Do czego odnosi się identyfikator zasobu # 0x7f03002b? Należy podać zawartość see_today_landscape_layout.xmlpliku.
a.ch.

tak, odnosi się do see_today_landscape_layout.xml według R.java
Nik,


Miałem ten problem podczas aktualizacji do używania, compile 'com.android.support:appcompat-v7:23.4.0'jeśli pozostanę z v7:22.2.0'tym działa
stephen

Odpowiedzi:


36
  1. w zaćmieniu, przejdź do Project> Clean ...
  2. wybierz swój projekt, a następnie naciśnij OK
  3. ponownie uruchom aplikację

jeśli to się powtórzy, usuń plik r.java. wygeneruje się automatycznie.


2
jak wspomniałem wcześniej ... wyczyściłem foldery bin i gen i odbudowałem aplikację ... nadal nie działa ...
Nik,

128
Jeśli to nie rozwiązało problemu, dlaczego pojawił się znacznik wyboru?
IcedDante,

1
co zrobisz, jeśli stanie się to w aplikacji do wydania?
Dinesh

220

W moim stanie przyczyną był intparametr dla TextView. Pokażę przykład

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

pobiera informacje o błędzie powyżej.

Można to naprawić, konwertując intna Stringtaki

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

Kiedy piszesz int, oczekuje zasobu, a nie tekstu, który piszesz. Dlatego zachowaj ostrożność podczas ustawiania intjako a Stringw systemie Android.


Dzięki, zadziałało, próbowałem zrobić tak: num2.setText (lotteryCharacters.charAt (2)); następnie zmieniłem na num2.setText (String.valueOf (lotteryCharacters.charAt (2))); ... i zadziałało!
TharakaNirmana

1
Zastanawiam się, jaka jest różnica między wartością valueOf (i) a „” + i?
peterb

Całkowicie nieoczekiwany, świetny połów! Dzięki
gunjot singh

1
A co z kodem XAML, jak mogę ustawić wartość. Mój przypadek powinien ustawić wartość dziesiętną dla właściwości w XAML
zquanghoangz

2
Dzięki, powodem jest to, że metoda setText jest przeciążona i akceptuje zarówno ciąg znaków, jak i identyfikator zasobu. Następnie mijasz int, który szuka Id zasobu
abedfar

12

Ponieważ ustawiasz układ jawnie, możesz spróbować umieścić go w domyślnym folderze / layout, a nie w / layout-land, ponieważ tak jest, jeśli chcesz, aby Android automatycznie obsługiwał obrót za Ciebie.


1
Jeśli telefon jest ustawiony pionowo, będzie ustawiony pionowo, po obróceniu telefon będzie w orientacji poziomej. Czy starasz się, aby zawsze był krajobraz? Następnie musisz ustawić orientację działania na poziomą w pliku manifestu lub w kodzie, zobacz to pytanie stackoverflow.com/questions/2150287/ ...
mbwasi

Zrobiłem to, jak wspomniałem w swoim pytaniu '<activity android: name = ". LandScapeImageActivity" android: screenOrientation = "landscape"> </activity>'
Nik,

1
brakuje części dotyczącej zmian konfiguracji <aktywność android: screenOrientation = "krajobraz" android: configChanges = "orientacja | keyboardHidden" android: name = "abcActivty" />
mbwasi


2

Może się tak zdarzyć z powodu innego języka w telefonie, dla którego Twój kod nie zawiera zasobu. Na przykład Twój plik preferencji.xml jest umieszczony w xml-en i próbujesz uruchomić aplikację na telefonie z wybranym językiem francuskim, aplikacja ulegnie awarii.


Zawsze twórz domyślne foldery zasobów, a następnie dodaj foldery specyficzne dla języka lub orientacji. Chociaż może tak być, ale nie musi, tutaj :)
Ahmad Ali Nasir

2

Otrzymałem ten błąd z jeszcze jednego powodu:

Miałem plik res/xml/data.xmli próbowałem go załadować Resourcesklasą taką:

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

Jest to jednak niepoprawne, ponieważ metoda Resources.getSystem()zwraca globalny obiekt zasobów udostępnionych, który zapewnia dostęp tylko do zasobów systemowych.

Prawidłowy sposób jest następujący (z poziomu Aktywności wewnętrznej):

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

Jak wtedy uzyskać dostęp do zasobów z funkcji najwyższego poziomu lub klas, które nie dziedziczą po Aktywności?
Vivek Yadav

2

W moim przypadku moja wersja Build Tools w moim build.gradle dla modułu aplikacji była nieaktualna w starym projekcie. Aktualizacja rozwiązała problem:

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

Zaktualizowano do najnowszej wersji narzędzi do kompilacji (25.0.1), zsynchronizowano projekt i wszystko znów było dobrze.


2

Sprawdź, czy import jest prawidłowy. Miałem podobny problem, gdy Rwskazywałem na Rplik systemowy Androida , a nie lokalny.


1

Usunąłem foldery buildw projekcie. Po wyczyszczeniu i przebudowie w Android Studio. Następnie poprawiono błędy w build.gradle i AndroidManifest.


1

Może to również powodować problemy: przypadkowo jeden z moich układów został zaparkowany w folderze zasobów mojego tabletu, więc ten błąd wystąpił tylko w przypadku układu telefonu. Układ telefonu po prostu nie miał odpowiedniego pliku układu.

Pracowałem ponownie po przeniesieniu pliku układu do odpowiedniego standardowego folderu i po przebudowie projektu.


Czy mógłbyś podać więcej informacji na ten temat? Stackoverflow.com/help/how-to-answer
Rich Benner

0

Upewnij się, że wskazany R jest właściwy. Miałem problem bardzo podobny do tego, w którym import został wstawiony przez Eclipse, który wskazywał na plik System R, a nie projekt. Wymagało to dużo drapania po głowie. Mam nadzieję że to pomoże.


0

Masz orientację ekranu ustawioną na poziomą w pliku xml. Jeśli użyłeś eclipse do wygenerowania tego pliku, utworzyłby się on w folderze res / layout-land /, ale kiedy otworzysz aktywność w trybie portretowym, aplikacja wyszuka xml w folderze res / layout-port / lub zwykłym res / layout / . Jeśli nie masz XML dla trybu portretowego, aplikacja ulegnie awarii.


0

Naprawiłem w ten sposób:

Utwórz folder w nazwie katalogu zasobów, "drawable-nodpi"a następnie przenieś wszystkie zasoby w tym katalogu z innego katalogu do rysowania.

Teraz wyczyść projekt, a następnie odbuduj go. Uruchom ponownie, mając nadzieję, że tym razem zadziała bez żadnego wyjątku nie znaleziono zasobu.


To wskazało mi właściwą ścieżkę, ale pamiętaj o tym poście: stackoverflow.com/questions/24682094/ ...
Adrian

0

Wystąpił ten błąd, gdy próbowałem uzyskać dostęp do danych pakietu z One Intent za pomocą getInt („ID”).

Rozwiązałem to używając getString („ID”).

Z Activity1 miałem

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

W działaniu 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
Zaktualizuj swoją odpowiedź, aby wyjaśnić, w jaki sposób rozwiązuje to problem, i ulepsza odpowiedzi, które zostały zaopiniowane i zaakceptowane przez to 5-letnie pytanie. Zobacz: Jak napisać dobrą odpowiedź .
FluffyKitten

Rozważ dodanie kilku szczegółów i wyjaśnień na poparcie swojej odpowiedzi, aby była pomocna dla innych
Souvik Ghosh,

0

U mnie unieważnienie pamięci podręcznej i ponowne uruchomienie nie działały. Usunąłem foldery .idea i .gradle. Jeśli to zrobisz, nie zapominaj, że takie rzeczy jak dzienniki kompilacji lub coś innego może zniknąć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.