Android.content.res.Resources abrufen $ NotFoundException: Ausnahme, auch wenn die Ressource in Android vorhanden ist


87

Bitte lassen Sie mich wissen, wo ich falsch liege, um den Fehler zu erhalten.

Ich erstelle eine App, deren Aktivität darin besteht, sich nur im Querformat zu befinden. Also habe ich Folgendes in der Datei AndroidManifest.xml hinzugefügt

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

Ich habe einen Ordner wie erstellt

/ res / layout-land

und fügen Sie ein Layout mit dem Namen see_today_landscape_layout hinzu.

und in habe onCreate()ich folgendes hinzugefügt

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

Aber wenn ich meine App starte, erhalte ich den folgenden Fehler

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

Ich habe R.java eingecheckt und es hat die Ressource mit der ID 7f03002b, nach der die Ausnahme sucht und die dort vorhanden ist ...

Ich habe das Projekt beispielsweise fünfmal bereinigt und neu erstellt, aber das Problem tritt immer noch auf.

Seltsamerweise funktionierte das gestern und heute nicht. Der Code ist der gleiche.


Worauf bezieht sich die Ressourcen-ID # 0x7f03002b? Sie sollten den Inhalt der see_today_landscape_layout.xmlDatei angeben.
a.ch.

Ja, es bezieht sich auf see_today_landscape_layout.xml gemäß R.java
Nik


Ich hatte dieses Problem beim Upgrade zur Verwendung compile 'com.android.support:appcompat-v7:23.4.0' , wenn ich mit dem Aufenthalt v7:22.2.0'es funktioniert
stephen

Antworten:


36
  1. Gehen Sie in Eclipse zu Projekt> Reinigen ...
  2. Wählen Sie Ihr Projekt aus und drücken Sie OK
  3. Starten Sie die App neu

Wenn es wieder passiert, löschen Sie die Datei r.java. es wird automatisch generiert.


2
Wie ich bereits erwähnt habe ... Ich habe Bin- und Gen-Ordner gelöscht und die App neu erstellt. Funktioniert immer noch nicht.
Nik

125
Wenn dies Ihr Problem nicht behoben hat, warum wurde es dann mit einem Häkchen versehen?
IcedDante

1
Was machst du, wenn dies in der Release-App passiert?
Dinesh

218

Für meinen Zustand war die Ursache intParameter für TextView. Lassen Sie mich ein Beispiel zeigen

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

Ruft die obigen Fehlerinformationen ab.

Dies kann durch die Umwandlung festgelegt werden , intum Stringdiese gerne

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

Beim Schreiben intwird eine Ressource erwartet, nicht der Text, den Sie schreiben. Seien Sie also vorsichtig beim Einstellen eines intals Stringin Android.


Danke, es hat funktioniert, ich habe versucht, Folgendes zu tun: num2.setText (lotteryCharacters.charAt (2)); dann habe ich zu num2.setText (String.valueOf (lotteryCharacters.charAt (2)) gewechselt; ... und es hat funktioniert!
TharakaNirmana

1
Ich frage mich, was der Unterschied zwischen valueOf (i) und "" + i ist.
Peterb

Völlig unerwartet, toller Fang! Danke
gunjot singh

1
Wie wäre es mit XAML-Code, wie kann ich den Wert einstellen. Mein Fall ist, sollte Dezimalwert für Eigenschaft auf XAML setzen
zquanghoangz

2
Der Grund dafür ist, dass setText eine überladene Methode ist, die sowohl String- als auch Ressourcen-ID akzeptiert. Dann übergeben Sie ein int, das nach Ressourcen-
ID

12

Da Sie das Layout explizit festlegen, möchten Sie möglicherweise versuchen, es in den Standardordner / layout zu legen, der sich nicht im / layout-land befindet, da Android die Rotation automatisch für Sie übernehmen soll.


1
Wenn sich das Telefon im Hochformat befindet, befindet es sich im Hochformat. Wenn Sie das Telefon drehen, befindet es sich im Querformat. Versuchst du es immer landschaftlich zu gestalten? Dann müssen Sie die Ausrichtung der Aktivität auf Landschaft in der Manifest-Datei oder im Code festlegen.
mbwasi

Ich habe das getan, wie ich in meiner Frage '<Aktivität android: name = ". LandScapeImageActivity" android: screenOrientation = "Landschaft"> </ Aktivität>' erwähnt habe
Nik

1
Sie vermissen den Konfigurationsänderungsteil <Aktivität android: screenOrientation = "Landschaft" android: configChanges = "Ausrichtung | Tastatur versteckt" android: name = "abcActivty" />
mbwasi

9

Versuchen Sie, Ihre Layout-XML von res/layout-landin einen res/layoutOrdner zu verschieben


in den Layoutordner?
Robert

1
aus res / layout-land >> res / layout Ordner
Ashish Kumar

Ist

Ich habe meine XML von dann verschoben res/layout-sw600dp, res/layoutes hat funktioniert. Vielen Dank für Ihre
Antwort

2

Dies kann aufgrund einer anderen Sprache im Telefon geschehen, für die Ihr Code nicht über das entsprechende Asset verfügt. Zum Beispiel wird Ihre Einstellungen.xml in xml-en abgelegt und Sie versuchen, Ihre App auf einem Telefon auszuführen, auf dem Französisch ausgewählt ist. Die App stürzt ab.


Erstellen Sie immer Standard-Asset-Ordner und fügen Sie dann sprach- oder orientierungsspezifische Ordner hinzu. Obwohl dies hier drüben der Fall sein könnte oder nicht :)
Ahmad Ali Nasir

2

Ich habe diesen Fehler aus einem anderen Grund erhalten:

Ich hatte die Datei res/xml/data.xmlund habe versucht, sie mit einer ResourcesKlasse wie dieser zu laden :

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

Dies ist jedoch falsch, da die Methode Resources.getSystem()ein globales freigegebenes Ressourcenobjekt zurückgibt, das nur Zugriff auf Systemressourcen bietet.

Der richtige Weg ist wie folgt (aus der Aktivität heraus):

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

Wie kann ich über Funktionen oder Klassen der obersten Ebene, die dann nicht von Activity erben, auf Ressourcen zugreifen?
Vivek Yadav

2

In meinem Fall war meine Build Tools-Version in meinem build.gradle für das App-Modul in einem alten Projekt veraltet. Durch das Aktualisieren wurde das Problem behoben:

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

Auf die neueste Version der Build-Tools (25.0.1) aktualisiert und das Projekt synchronisiert, war alles wieder in Ordnung.


2

Überprüfen Sie, ob Ihre Importe korrekt sind. Ich hatte ein ähnliches Problem, bei dem Rauf die Android-Systemdatei Rverwiesen wurde, nicht auf meine lokale.


1

Ich habe Ordner buildin einem Projekt gelöscht . Nach der Reinigung und Neuerstellung in Android Studio. Dann wurden Fehler in build.gradle und AndroidManifest korrigiert.


1

Dies kann auch zu Problemen führen: Aus Versehen wurde eines meiner Layouts in meinem Tablet-Ressourcenordner geparkt, sodass ich diesen Fehler nur beim Telefonlayout erhalten habe. Das Telefonlayout hatte einfach keine passende Layoutdatei.

Ich habe wieder gearbeitet, nachdem ich die Layoutdatei in den richtigen Standardordner verschoben und ein Projekt neu erstellt hatte.


Könnten Sie bitte weitere Informationen dazu bereitstellen stackackflow.com/help/how-to-answer
Rich Benner

0

Stellen Sie sicher, dass das R, auf das Sie zeigen, das richtige ist. Ich hatte ein ähnliches Problem, bei dem ein Import von Eclipse eingefügt wurde, der eher auf die System R-Datei als auf die Projektdatei zeigte. Es dauerte viel Kopfkratzen. Hoffe das hilft.


0

Sie haben die Bildschirmausrichtung in Ihrer XML auf Querformat eingestellt. Wenn Sie Eclipse zum Generieren dieser Datei verwendet haben, wurde sie unter res / layout-land / folder erstellt. Wenn Sie jedoch die Aktivität im Hochformatmodus öffnen, sucht die Anwendung in res / layout-port / folder oder im regulären res / layout / nach XML. . Wenn Sie keine XML-Datei für den Hochformatmodus hatten, stürzt Ihre Anwendung ab.


0

Ich habe das folgendermaßen behoben:

Erstellen Sie einen Ordner in Ihrem Ressourcenverzeichnisnamen "drawable-nodpi"und verschieben Sie dann alle Ressourcen in diesem Verzeichnis aus einem anderen Zeichenverzeichnis.

Bereinigen Sie nun Ihr Projekt und bauen Sie es neu auf. Führen Sie es erneut aus, hoffentlich funktioniert es diesmal ohne Ausnahme, dass keine Ressource gefunden wurde.


Dies hat mich auf den richtigen Weg gebracht, aber bitte beachten Sie diesen Beitrag: stackoverflow.com/questions/24682094/…
Adrian

0

Ich habe diesen Fehler erhalten, als ich versucht habe, mit getInt ("ID") von One Intent auf Bundle-Daten zuzugreifen.

Ich habe es mit getString ("ID") gelöst.

Von Aktivität1 hatte ich

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

Bei Aktivität 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
Bitte aktualisieren Sie Ihre Antwort, um zu erklären, wie dies das Problem löst, und verbessern Sie die positiven und akzeptierten Antworten, die diese 5 Jahre alte Frage bereits hat. Siehe auch : Wie kann ich eine gute Antwort schreiben .
FluffyKitten

Bitte erwägen Sie, einige Details und Erklärungen hinzuzufügen, um Ihre Antwort zu unterstützen, damit sie für andere hilfreich ist
Souvik Ghosh

0

Bei mir hat die Ungültigmachung und der Neustart des Caches nicht funktioniert. Ich habe die Ordner .idea und .gradle entfernt. Wenn Sie das tun, vergessen Sie nicht, dass Dinge wie das Erstellen von Protokollen oder etwas anderes verschwinden könnten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.