Ottenere android.content.res.Resources $ NotFoundException: eccezione anche quando la risorsa è presente in Android


89

Per favore fatemi sapere dove sto sbagliando per ottenere l'errore.

Sto creando un'app la cui attività deve essere solo in modalità orizzontale. Quindi ho aggiunto quanto segue nel file AndroidManifest.xml

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

Ho creato una cartella come

/ res / layout-land

e aggiungi un layout chiamato see_today_landscape_layout in esso.

e in onCreate()ho aggiunto quanto segue

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

Ma quando eseguo la mia app ricevo il seguente errore

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

Ho incrociato controllato in R.java e ha la risorsa con l'ID 7f03002b che l'eccezione sta cercando ed è presente lì ...

Ho pulito e ricostruito il progetto per dire 5 volte, ma il problema si verifica ancora.

Il punto strano è che ieri funzionava e oggi non funziona. Il codice è lo stesso.


A cosa si riferisce l'ID risorsa # 0x7f03002b? Dovresti fornire il contenuto del see_today_landscape_layout.xmlfile.
a.ch.

sì, si riferisce a see_today_landscape_layout.xml secondo R.java
Nik

1
Possibile duplicato della risorsa Android non trovata eccezione?
rds

Ho riscontrato questo problema durante l'aggiornamento da utilizzare compile 'com.android.support:appcompat-v7:23.4.0'se rimango con v7:22.2.0'esso funziona
stephen

Risposte:


36
  1. in eclipse, vai su Progetto> Pulisci ...
  2. selezionare il progetto, quindi premere OK
  3. riavvia l'app

se succede di nuovo, cancella il file r.java. genererà automaticamente.


2
come ho detto prima ... ho cancellato le cartelle bin e gen e ho ricostruito l'app .. ancora non funziona ...
Nik

128
Se questo non ha risolto il tuo problema, perché ha ottenuto il segno di spunta?
IcedDante

1
cosa fai se questo accade sull'app di rilascio?
Dinesh

220

Per le mie condizioni la causa stava prendendo intparametri TextView. Fammi mostrare un esempio

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

ottiene le informazioni sull'errore sopra.

Questo può essere risolto convertendo intin Stringquesto modo

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

Mentre scrivi int, si aspetta una risorsa non il testo che stai scrivendo. Quindi fai attenzione all'impostazione intdi un Stringin Android.


Grazie, ha funzionato, stavo cercando di fare in questo modo: num2.setText (lotteryCharacters.charAt (2)) ;, poi sono passato a num2.setText (String.valueOf (lotteryCharacters.charAt (2))); ... e ha funzionato!
TharakaNirmana

1
Mi chiedo qual è la differenza tra valueOf (i) e "" + i?
peterb

Totalmente inaspettato, ottima cattura! Grazie
gunjot singh

1
Che ne dici del codice XAML, come posso impostare il valore. Il mio caso è impostare il valore decimale per la proprietà su XAML
zquanghoangz

2
Grazie, il motivo è che setText è un metodo sovraccarico che accetta sia String che ID risorsa. Quindi si passa un int che cerca l'ID risorsa
abedfar

12

Dal momento che stai impostando il layout in modo esplicito, potresti provare a metterlo nella cartella default / layout non in / layout-land poiché questo è se vuoi che Android gestisca automaticamente la rotazione per te.


1
Se il telefono è in visualizzazione verticale sarà in verticale, quando ruoti il ​​telefono sarà in orizzontale. Stai cercando di renderlo sempre paesaggistico? Allora che cosa dovete fare è impostare l'orientamento delle attività al paesaggio nel file manifesto o nel codice, vedere questa domanda stackoverflow.com/questions/2150287/...
mbwasi

L'ho fatto come ho menzionato nella mia domanda "<activity android: name =". LandScapeImageActivity "android: screenOrientation =" landscape "> </activity>"
Nik

1
ti manca la parte configchanges <activity android: screenOrientation = "landscape" android: configChanges = "orientamento | keyboardHidden" android: name = "abcActivty" />
mbwasi


2

Ciò può accadere a causa di una lingua diversa nel telefono per la quale il tuo codice non ha la risorsa. Ad esempio, la tua preferenza.xml è collocata in xml-en e stai tentando di eseguire la tua app su un telefono che ha selezionato il francese, l'app andrà in crash.


Creare sempre cartelle di risorse predefinite e quindi aggiungere quelle specifiche per lingua o orientamento. Anche se questo potrebbe o non potrebbe essere il caso qui :)
Ahmad Ali Nasir

2

Ho ricevuto questo errore da un altro motivo:

Avevo il file res/xml/data.xmle stavo cercando di caricarlo con una Resourcesclasse come questa:

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

Tuttavia questo non è corretto poiché il metodo Resources.getSystem()restituisce un oggetto Risorse condivise globali che fornisce l'accesso solo alle risorse di sistema.

Il modo corretto è il seguente (dall'interno di Activity):

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

Come accedere alle risorse da funzioni o classi di primo livello che non ereditano quindi da Activity?
Vivek Yadav,

2

Nel mio caso la mia versione Build Tools nel mio build.gradle per il modulo app era obsoleta su un vecchio progetto. L'aggiornamento ha risolto il problema:

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

Aggiornato all'ultima versione degli strumenti di build (25.0.1) e sincronizzato il progetto e tutto è andato di nuovo bene.


2

Controlla per assicurarti che le tue importazioni siano corrette. Ho avuto un problema simile in cui Rpuntava al Rfile di sistema Android , non a quello locale.


1

Ho eliminato cartelle buildall'interno di un progetto. Dopo averlo pulito e ricostruito in Android Studio. Quindi corretti gli errori in build.gradle e AndroidManifest.


1

Ciò può anche causare alcuni problemi: accidentalmente uno dei miei layout è stato parcheggiato nella cartella delle risorse del tablet, quindi ho ricevuto questo errore solo con il layout del telefono. Il layout del telefono semplicemente non aveva un file di layout adatto.

Ho lavorato di nuovo dopo aver spostato il file di layout nella cartella standard corretta e una successiva ricostruzione del progetto.


Potresti fornire maggiori informazioni su questo per favore stackoverflow.com/help/how-to-answer
Rich Benner,

0

Assicurati che la R a cui stai puntando sia quella corretta. Ho avuto un problema molto simile a questo, in cui è stata inserita un'importazione da Eclipse che puntava al file System R piuttosto che a quello del progetto. Ci sono voluti molti graffi alla testa. Spero che sia di aiuto.


0

Hai l'orientamento dello schermo impostato su orizzontale nel tuo xml. Se hai usato eclipse per generare questo file, lo avrebbe creato sotto res / layout-land / folder, ma quando apri l'attività in modalità verticale l'applicazione cercherà xml nella cartella res / layout-port / o nella normale res / layout / . Se non avevi xml per la modalità verticale, la tua applicazione andrà in crash.


0

Ho risolto il problema in questo modo:

Creare una cartella nel nome della directory delle risorse "drawable-nodpi"e quindi spostare tutte le risorse in questa directory da altre directory disegnabili.

Ora pulisci il tuo progetto e poi ricostruiscilo. Esegui di nuovo, si spera che funzioni questa volta senza che nessuna risorsa non sia stata trovata.


Questo mi ha indicato la strada giusta, ma tieni presente questo post: stackoverflow.com/questions/24682094/…
Adrian

0

Ho ricevuto questo errore quando stavo tentando di accedere ai dati del bundle da One Intent utilizzando getInt ("ID").

L'ho risolto utilizzando getString ("ID").

Da Activity1 ho avuto

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

Nell'attività 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
Aggiorna la tua risposta per spiegare come questo risolve il problema e migliora le risposte votate e accettate che questa domanda vecchia di 5 anni ha già. Vedi: come scrivo una buona risposta .
FluffyKitten

Considera l'
idea di

0

Per me l'invalidazione della cache e il riavvio non hanno funzionato. Ho rimosso le cartelle .idea e .gradle. Se lo fai, non dimenticare che cose come i log di build o qualcosa del genere potrebbero andare via.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.