java.lang.RuntimeException: impossibile creare un'istanza dell'attività ComponentInfo


151

Stavo cercando di eseguire un codice di esempio Durante l'avvio dell'applicazione nell'emulatore Android 1.5, ho riscontrato questi errori .... Qualcuno ha qualche suggerimento ..?

ERRORE da LogCat:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

Modifica Questo errore si verifica per la maggior parte dei principianti, il fatto è che devi aggiungere tutte le tue attività nel file manifest.


grazie Dan Breslau ... Adesso sembra meglio..come farlo?
Rahul,

1
Scusate ragazzi ... scusate per aver rinunciato al vostro tempo..ho appena dimenticato di aggiungere la nuova classe al file manifest ..
rahul

1
l'aggiornamento di tutti i miei strumenti (eclipse & sdk manager) lo ha riparato per me, oltre ad aggiungere la libreria di supporto Android al progetto
Hayden Thring,

ho questo problema, vedere questo stackoverflow.com/questions/30473270/...
DanialAbdi

Risposte:


137

È un problema del tuo intento.

Aggiungi il tuo Activitynel tuo AndroidManifest.xml.

Quando vuoi fare una nuova attività, devi registrarla nel tuo AndroidManifest.xml.


4
Ho una classe che non estende l'attività, contiene solo alcune funzioni comuni; ma ho ancora questa eccezione; perché?
Manoj Kumar,

Nel mio progetto si dice che la classe non è pubblica quando si guarda all'androide: nome nel file xml. Quando aggiungo pubblico prima della lezione nell'attività principale, l'app viene eseguita senza problemi. Strano.
Codebeat

ho riscontrato questo problema in un'app nativa che stavo sviluppando .. ho aggiunto un altro metodo nella classe di attività e ho iniziato a ricevere questo errore .. per me un clean + ricostruito lo ha risolto ..
ashishsony

6
Un'altra opzione è che la tua attività è nel manifest, ma è dichiarata come abstract(ho fatto quell'errore durante il refactoring e il messaggio di errore non aiuta molto).
Czechnology,

59

Potresti provare a trovare la vista prima della onCreate()quale non è corretto.

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

  @Override
  protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  ...
}

2
Grazie amico. Sei un salvavita. È abbastanza sciocco ma grazie mille. Mi perseguitava da una settimana ormai.
circa

stava facendo lo stesso errore;)
Sumit Jha,

Lo stesso errore anche qui. Grazie
Pooja il

53

C'è un altro modo per ottenere un java.lang.RuntimeException: impossibile creare un'istanza dell'eccezione ComponentInfo e l'attività che si sta tentando di avviare è astratta . Ho fatto questo stupido errore una volta ed è molto facile da trascurare.


13
Inoltre, l'attività deve essere pubblica (questo è stato un mio errore).
Djjeck,

Mi dispiace disturbarla due anni dopo, ma mi chiedevo perché non puoi iniziare un'attività astratta?
Benjamin

2
@BenjaminFranklin Una classe astratta significa che non è completa, manca parti. Il prefisso di una classe con la parola chiave abstract significa che non può essere istanziato direttamente, ma solo tramite l'ereditarietà: e un'altra classe che implementa le funzioni mancanti della classe astratta.
Kit10

Ho già ereditato la classe astratta ma non riesco ancora a lavorare. Spiegheresti ulteriormente ??
Mohammedsalim Shivani,

53

Nel mio caso ho dimenticato di aggiungere la libreria di google maps

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

Inoltre, controlla che non ti manchi il punto precedente prima del percorso dell'attività

<activity android:name=".activities.MainActivity"/>

2
Grazie, @Maragues !! Era lo stesso problema! Hai risolto il mio problema. :)
cmcromance,

27

Immagine

Succede anche a causa di questo problema. Deselezionai i vasetti che dovevano essere esportati nell'apk e accadde la stessa cosa. Spuntare i barattoli che l'applicazione deve eseguire.


È importante vedere questo problema e provare correttamente ogni componente di dipendenza. Ad esempio, su Android Studio (o Intellij IDEA) selezionare l'ambito corretto per le dipendenze (Fornito, Compila, ...). Nel mio caso, modifica Fornito per compilare e funziona correttamente.
dayanruben,

15

Ho riscontrato anche questo problema, ma in modo leggermente diverso. Ecco il mio scenario:

Dettaglio app:

  • Utilizzo di ActionBarSherlock come libreria
  • Utilizzo di android-support-v4-r7-googlemaps.jar nella libreria ActionBarSherlock in modo da poter utilizzare un "frammento di mappa" nel mio progetto principale
  • Aggiunto il barattolo al percorso di compilazione del mio progetto principale
  • Incluso <uses-library android:name="com.google.android.maps" />nei manifesti del progetto della biblioteca e del mio progetto principale (questo potrebbe non essere necessario nella biblioteca?)
  • Il manifest nel progetto primario aveva la definizione di attività corretta e tutte le proprietà appropriate
  • Non avevo un'attività astratta o uno qualsiasi degli altri gotcha che ho visto su Stack Overflow relativo a questo problema.

Tuttavia, ho ancora riscontrato l'errore descritto nel post originale e non sono riuscito a farlo sparire. Il problema però era leggermente diverso da un punto di vista:

  • Ha interessato solo una nuova installazione dell'applicazione sul mio dispositivo. Ogni volta che l'app installata per la prima volta, viene visualizzato l'errore preceduto da numerosi "avvisi" di: Impossibile risolvere la superclasse di FragmentActivity
  • Tali avvisi risalgono alla libreria ActionBarSherlock
  • L'app forzerebbe la chiusura e il crash.
  • Se ho immediatamente ricostruito e ridistribuito l'app, ha funzionato bene.
  • L'unica volta che si è schiantato è stato su un'installazione totalmente nuova. Se avessi disinstallato l'app, compilata e distribuita di nuovo da Eclipse, si sarebbe arrestata in modo anomalo. Compilare / distribuire una seconda volta, funzionerebbe benissimo.

Come l'ho risolto:

  • Nel progetto della libreria ActionBarSherlock, ho aggiunto android-support-v4-r7-googlemaps.jar al percorso di compilazione
  • Questo passaggio da solo non ha risolto il problema

  • Una volta aggiunto il vaso al percorso di generazione, ho modificato l'ordine nella scheda Percorso di costruzione Java> Ordine ed esportazione: ho impostato il JAR sul primo elemento nell'elenco (era l'ultimo dopo gli elementi / src e / gen ).

  • Ho quindi ricostruito e ridistribuito l'app sul mio dispositivo - ha funzionato come previsto su una nuova installazione. Per essere sicuro, l'ho disinstallato di nuovo 2-3 volte e reinstallato - funzionava ancora come previsto.

Questo potrebbe essere un errore da principiante, ma ho trascorso parecchio tempo a cercare tra i post e il mio codice per capirlo, quindi spero che possa essere utile a qualcun altro. Potrebbe non risolvere tutte le situazioni, ma in questo caso particolare, quello ha finito per essere la soluzione al mio problema.


Grazie! Questo ha funzionato per me quando ho riscontrato questo problema durante l'utilizzo di google admob sdk esempio "adcatalog" e ho riscontrato questo errore. Una nota importante è selezionare le caselle di controllo accanto alle librerie. Nel mio caso vasetti di supporto e admobsdk.
jsmars,

14

Questo potrebbe non essere rilevante per la vera domanda, ma nel mio caso, ho cercato di implementare Kotlin e lasciato fuori apply plugin: 'kotlin-android'. L'errore si è verificato perché non è stato possibile riconoscere MainActivity come file .kt.

Spero che aiuti qualcuno.


1
Aggiungi anche classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONin build.gradle principale
Rajkiran

11

Questo errore può anche essere il segno estremo di un errore stupido (come quando io - intendo, tosse, come quando un mio amico che mi ha mostrato il suo codice una volta) in cui cercano di eseguire il codice al di fuori di un metodo come provare a farlo :

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

piuttosto che questo:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

1
Aiuto enorme. Risolti i miei problemi e mi ha portato a creare la mia prima app Android completamente funzionale
TheUnCola

7

Mi sono sbarazzato di questo problema cancellando il BineGen cartella dal progetto (che ritorna automaticamente quando il progetto verrà compilato) e quindi pulendo il progetto da -> Menu -> Progetto -> clean.

Grazie.


6

Nel mio caso non ho impostato il setContentView(R.layout.main);

Se si crea una nuova classe, non ignorare per impostare questo onCreate(Bundle savedInstanceState)metodo on .

Ho fatto questo stupido errore più volte.


6

Pulisci semplicemente il tuo progetto di lavoro o riavvia eclissi. Quindi esegui il tuo progetto. Funzionerà.


Tante volte è successo ... Ora non è possibile risolvere un file IADL, che è probabilmente la radice del problema ed eclissi si stava compilando sulla base di vecchi file ... quindi ricordati di pulire, riavviare e compilare i bambini .. .
Hunter-Orionnoir

6

Per me, la mia stringa del pacchetto AndroidManifest.xmlnon era corretta (copiata da un tutorial). Assicurati che la stringa del pacchetto in questo file sia la stessa della tua attività principale, ad es

 package="com.example.app"

Un modo semplice per farlo è aprire il file AndroidManifest.xml nella scheda "Manifest" e digitarlo nella casella di testo accanto a Pacchetto, oppure utilizzare il pulsante Sfoglia.

Inoltre, la stringa del pacchetto per la mia attività era errata, ad es

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

Ho (stupidamente) riscontrato lo stesso errore settimane dopo quando ho rinominato il nome del mio pacchetto. Se lo fai, assicurati di aggiornare anche il AndroidManifest.xmlfile.


5

Ok, ho una discreta esperienza su iPhone ma sono nuovo su Android. Ho avuto questo problema quando ho avuto:

Button infoButton = (Button)findViewById(R.id.InfoButton);

questa riga di codice sopra:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Forse sono privato del sonno: P


2
Anch'io sono privato del sonno
Oz Mayt

3

Di recente l'ho riscontrato con una nuova reinstallazione di Eclipse. Si scopre che il livello di conformità del mio compilatore era impostato su Java 1.7 e il progetto richiesto 1.6.

In Eclipse: Progetto -> Proprietà -> Compilatore Java -> Conformità JDK


2

Ho riscontrato questo problema e risolto impostando la proprietà "launch mode" dell'attività.


2

Un altro motivo di questo problema potrebbe essere una libreria mancante.

Vai su Proprietà -> Android e verifica di aggiungere correttamente le librerie


1
Controlla anche che le librerie aggiunte abbiano un segno di spunta su di esse in Proprietà progetto -> Percorso build Java -> Ordine ed esportazione
Phil

2

Ho avuto lo stesso problema, ma avevo la mia attività dichiarata nel file manifest, con il nome corretto.

Il mio problema era che non dovevo importare librerie di terze parti in una cartella "libs" e avevo bisogno di farle riferimento nel mio progetto (tasto destro, proprietà, Java Build Path, Libraries, Aggiungi Jar ...).


2

Ciò può accadere se la classe di attività si trova all'interno di un pacchetto predefinito. L'ho risolto spostando la classe di attività in un nuovo pacchetto. e cambiando manifest.xml

prima

activity android:name=".MainActivity" 

dopo

activity android:name="new_package.MainActivity"

Grazie. era quello.
Stephane,

2

Nel mio caso, stavo cercando di inizializzare i componenti (UI) anche prima di onCreate chiamato per l'attività.

Assicurarsi che i componenti dell'interfaccia utente siano inizializzati / collegati nel onCreatemetodo successivosetContentView

NB: Questo è il mio primo errore durante l'apprendimento della programmazione Android.


2

Per me è stato diverso da uno dei precedenti,

L'attività è stata dichiarata astratta, ecco perché dare l'errore. Una volta rimosso ha funzionato.

prima

     public abstract class SampleActivity extends AppcompatActivity{
     }

Dopo la rimozione

     public class SampleActivity extends AppcompatActivity{
     }

1

Questo mi succede abbastanza spesso quando uso l'NDK. Ho scoperto che è necessario per me fare un "Clean" in Eclipse dopo ogni volta che lo faccio ndk-build. Spero che aiuti chiunque :)


1

Questo errore si verifica anche quando si utilizza ActionBarActivityma non si assegna uno AppCompatstile.

Per risolvere questo problema, imposta il tuo genitore in stile app su Theme.AppCompatuno come questo .:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

Bom trabalho @Ostkontentitan! funcionou para mim, obrigado.
Emerson Barcellos

1

Fare clic con il tasto destro su progetto> proprietà> android> e provare con versioni diverse di Android prima stavo facendo con Android 4.4, quindi sono passato ad Android 4.3 e ha funzionato!


1

Ho avuto lo stesso problema (impossibile creare un'istanza di attività):

PRIMA ragione:

Stavo accedendo

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

prima

mCamera = Camera.open();

Quindi il modo giusto di farlo è aprire prima la telecamera e poi accedere ai parametri.

SECONDO motivo: dichiara la tua attività nel file manifest

<activity android:name=".activities.MainActivity"/>

TERZO motivo: dichiarare l'autorizzazione della fotocamera nel file manifest.

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

Spero che questo ti aiuti


1

Nel mio caso, stavo cercando di incorporare l' SDK di Facebook e avevo l' ID applicazione errato ; quindi l'errore stava spuntando. Nel tuo file manifest, dovresti avere i metadati corretti:

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1

Se hai installato Android Studio 2.3.3 e Android Studio 3.0.0, la commutazione tra i due programmi per lo sviluppo provocherà questo errore. Questo perché esistono situazioni in cui le classi supportate in un programma non sono supportate dall'altro e viceversa. È importante mantenere la coerenza con la versione di Android Studio utilizzata per sviluppare un progetto.


1

Come suggerito dal djjeckcommento in questa risposta, mi sono perso di mettere il publicmodificatore per la mia classe.

Dovrebbe essere

public class MyActivity extends AppCompatActivity {

Potrebbe aiutare qualcuno come me.


1

Ho provato la soluzione sopra ma niente funziona per me. dopo che ho appena aggiunto extendattività anzichéAppCompatActivity e funzionando bene.

Usato

public class MainActivity extends Activity  

invece di

public class MainActivity extends AppCompatActivity 

non so quale fosse il vero problema.


0

Questo mi è successo quando ho provato a eseguire un Activity2.2 che utilizzava importazioni da Honeycomb non disponibili nelle versioni precedenti di Android e non incluse nel pacchetto di supporto v4.


0

La tua nuova attività aggiunge AndroidManifest.xmllike".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
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.