java.lang.RuntimeException: Aktivität ComponentInfo kann nicht instanziiert werden

151

Ich habe versucht, einen Beispielcode auszuführen. Beim Starten der Anwendung im Android 1.5-Emulator sind folgende Fehler aufgetreten. Hat jemand einen Hinweis?

FEHLER von 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

Bearbeiten Dieser Fehler tritt bei den meisten Anfängern auf. Sie müssen alle Ihre Aktivitäten zur Manifest-Datei hinzufügen.

rahul
quelle
danke Dan Breslau ... Es sieht jetzt besser aus ... wie geht das?
Rahul
1
Tut mir leid, Leute ... Entschuldigung, dass Sie sich die Zeit genommen haben. Ich habe nur vergessen, die neue Klasse zur Manifest-Datei hinzuzufügen.
Rahul
1
Das Aktualisieren aller meiner Tools (Eclipse & SDK-Manager) hat das Problem für mich behoben und dem Projekt eine Android-Support-Bibliothek hinzugefügt
Hayden Thring
Ich habe dieses Problem, siehe diese stackoverflow.com/questions/30473270/…
DanialAbdi

Antworten:

137

Es ist ein Problem Ihrer Absicht.

Bitte fügen Sie Ihre Activityin Ihre AndroidManifest.xml .

Wenn Sie eine neue Aktivität erstellen möchten, sollten Sie diese in Ihrem registrieren AndroidManifest.xml.

Tanmay Mandal
quelle
4
Ich habe eine Klasse, die die Aktivität nicht erweitert, sondern nur einige allgemeine Funktionen enthält. aber ich bekomme immer noch diese Ausnahme; Warum?
Manoj Kumar
In meinem Projekt heißt es, dass die Klasse nicht öffentlich ist, wenn man sich den android: name in der XML-Datei ansieht. Wenn ich in der Hauptaktivität public vor dem Unterricht hinzufüge, läuft die App ohne Probleme. Seltsam.
Codebeat
Ich hatte dieses Problem in einer nativen App, die ich entwickelte. Ich fügte eine andere Methode in der Aktivitätsklasse hinzu und bekam diesen Fehler. Für mich löste ein Clean + Rebuild es.
Ashishsony
6
Eine andere Option ist, dass sich Ihre Aktivität im Manifest befindet, aber als deklariert ist abstract(ich habe diesen Fehler beim Refactoring gemacht und die Fehlermeldung hilft nicht viel).
Czechnology
59

Möglicherweise versuchen Sie, die Ansicht zu finden, vor onCreate()der sie falsch ist.

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);
  }
  ...
}
SMUsamaShah
quelle
2
Wooo, danke Mann. Du bist ein Lebensretter. Es ist ziemlich dumm, aber vielen Dank. Es hatte mich jetzt seit einer Woche verfolgt.
Meain
machte den gleichen Fehler;)
Sumit Jha
Gleicher Fehler auch hier. Danke
Pooja
53

Es gibt eine andere Möglichkeit, eine java.lang.RuntimeException abzurufen: Die ComponentInfo- Ausnahme für Aktivitäten kann nicht instanziiert werden. Dies ist die Aktivität, die Sie starten möchten . Sie ist abstrakt . Ich habe diesen dummen Fehler einmal gemacht und es ist sehr leicht zu übersehen.

Kevin
quelle
13
Außerdem muss die Aktivität öffentlich sein (dies war mein Fehler).
Djjeck
Es tut mir leid, Sie zwei Jahre später zu stören, aber ich habe mich gefragt, warum Sie keine abstrakte Aktivität starten können.
BenjaminFranklin
2
@BenjaminFranklin Eine abstrakte Klasse bedeutet, dass sie nicht vollständig ist und Teile fehlen. Wenn einer Klasse das Schlüsselwort abstract vorangestellt wird, kann sie nicht direkt instanziiert werden, sondern nur durch Vererbung: und andere Klassen, die die fehlenden Funktionen der abstrakten Klasse implementieren.
Kit10
Ich habe die abstrakte Klasse bereits geerbt, kann aber immer noch nicht arbeiten. Würden Sie bitte weiter erklären?
Mohammedsalim Shivani
53

In meinem Fall habe ich vergessen, die Google Maps-Bibliothek hinzuzufügen

<application>
    ....

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

Stellen Sie außerdem sicher, dass Sie den vorhergehenden Punkt vor dem Aktivitätspfad nicht verpassen

<activity android:name=".activities.MainActivity"/>
Maragues
quelle
2
Vielen Dank, @Maragues! Es war das gleiche Problem! Du hast mein Problem gelöst. :)
cmcromance
27

Bild

Dies geschieht auch aufgrund dieses Problems. Ich deaktivierte die Gläser, die in die apk exportiert werden mussten, und das gleiche passierte. Bitte kreuzen Sie die Gläser an, die Ihre App ausführen muss.

Miau-Bohnen
quelle
Es ist wichtig, dieses Problem zu erkennen und jede Abhängigkeitskomponente korrekt zu testen. Wählen Sie beispielsweise unter Android Studio (oder Intellij IDEA) den richtigen Bereich für die Abhängigkeiten aus (Bereitgestellt, Kompilieren, ...). In meinem Fall ändern Sie Provided to Compile und funktioniert einwandfrei.
Dayanruben
15

Ich bin auch auf dieses Problem gestoßen, aber auf etwas andere Weise. Hier war mein Szenario:

App Detail:

  • Verwenden von ActionBarSherlock als Bibliothek
  • Verwenden von android-support-v4-r7-googlemaps.jar in der ActionBarSherlock-Bibliothek, damit ich in meinem primären Projekt ein "Kartenfragment" verwenden kann
  • Das Glas wurde zum Erstellungspfad meines primären Projekts hinzugefügt
  • Enthalten die <uses-library android:name="com.google.android.maps" />in den Manifesten sowohl des Bibliotheksprojekts als auch meines Hauptprojekts (dies ist in der Bibliothek möglicherweise nicht erforderlich?)
  • Das Manifest im Primärprojekt hatte die richtige Aktivitätsdefinition und alle entsprechenden Eigenschaften
  • Ich hatte keine abstrakte Aktivität oder andere Fallstricke, die ich bei Stack Overflow im Zusammenhang mit diesem Problem gesehen habe.

Ich bin jedoch immer noch auf den im ursprünglichen Beitrag beschriebenen Fehler gestoßen und konnte ihn nicht zum Verschwinden bringen. Das Problem war jedoch in einer Hinsicht etwas anders:

  • Es betraf nur eine Neuinstallation der Anwendung auf meinem Gerät. Jedes Mal, wenn die App zum ersten Mal installiert wurde, wurde dem Fehler mehrere "Warnungen" vorangestellt: Folgende Superklasse von FragmentActivity konnte nicht aufgelöst werden
  • Diese Warnungen gingen auf die ActionBarSherlock-Bibliothek zurück
  • Die App würde das Schließen erzwingen und abstürzen.
  • Wenn ich die App sofort neu erstellt und bereitgestellt habe, hat sie einwandfrei funktioniert.
  • Das einzige Mal, dass es abstürzte, war eine völlig neue Installation. Wenn ich die von Dclipse erstellte und erneut bereitgestellte App deinstallieren würde, würde sie abstürzen. Ein zweites Mal erstellen / bereitstellen, es würde gut funktionieren.

Wie ich es behoben habe:

  • Im ActionBarSherlock-Bibliotheksprojekt habe ich dem Erstellungspfad die Datei android-support-v4-r7-googlemaps.jar hinzugefügt
  • Dieser Schritt allein hat das Problem nicht behoben

  • Nachdem das JAR zum Erstellungspfad hinzugefügt wurde, musste ich die Reihenfolge auf der Registerkarte Java-Erstellungspfad> Reihenfolge und Export ändern. Ich habe die JAR auf das erste Element in der Liste gesetzt (es war das letzte nach den Elementen / src und / gen) ).

  • Anschließend habe ich die App neu erstellt und auf meinem Gerät erneut bereitgestellt - bei einer Neuinstallation funktionierte sie wie erwartet. Um sicherzugehen, habe ich es 2-3 Mal erneut deinstalliert und neu installiert - es hat immer noch wie erwartet funktioniert.

Dies mag ein totaler Anfängerfehler sein, aber ich habe eine ganze Weile damit verbracht, Beiträge und meinen Code zu durchsuchen, um es herauszufinden. Hoffentlich kann es jemand anderem helfen. Möglicherweise werden nicht alle Situationen behoben, aber in diesem speziellen Fall war dies die Lösung für mein Problem.

Kyle
quelle
Vielen Dank! Dies funktionierte für mich, als ich dieses Problem bei der Verwendung von googles admob sdk Beispiel "adcatalog" bekam und diesen Fehler bekam. Ein wichtiger Hinweis ist das Aktivieren der Kontrollkästchen neben den Bibliotheken. In meinem Fall Support & Admobsdk Gläser.
Jsmars
14

Dies ist möglicherweise nicht relevant für die eigentliche Frage, aber in meinem Fall habe ich versucht, Kotlin zu implementieren, und habe es weggelassen apply plugin: 'kotlin-android'. Der Fehler ist aufgetreten, weil die MainActivity in .kt-Datei nicht erkannt werden konnte.

Hoffe es hilft jemandem.

Muz
quelle
1
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONFügen
Sie
11

Dieser Fehler kann auch das ultimative Zeichen für einen dummen Fehler sein (wie wenn ich - ich meine, Husten, wie wenn ein Freund von mir, der mir seinen Code einmal gezeigt hat), bei dem er versucht, Code außerhalb einer Methode wie dieser auszuführen ::

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) {
....
}

lieber als das:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}
ColossalChris
quelle
1
Riesige Hilfe. Ich habe meine Probleme
behoben
7

Ich habe dieses Problem durch Löschen des Binund beseitigtGen Ordner aus dem Projekt (der automatisch zurückkommt, wenn das Projekt erstellt wird) und das Projekt dann über -> Menü -> Projekt -> Bereinigen bereinigt habe.

Vielen Dank.

Jagdeep Singh
quelle
6

In meinem Fall habe ich das nicht eingestellt setContentView(R.layout.main);

Wenn Sie eine neue Klasse erstellen, beschlagen Sie diese nicht mit der onCreate(Bundle savedInstanceState)Methode on .

Ich habe diesen dummen Fehler mehrmals gemacht.

saji159
quelle
6

Bereinigen Sie einfach Ihr Arbeitsprojekt oder starten Sie Eclipse neu. Führen Sie dann Ihr Projekt aus. es wird klappen.

Emran Hamza
quelle
So oft ist dies passiert ... Jetzt kann eine IADL-Datei nicht mehr aufgelöst werden, was wahrscheinlich die Ursache des Problems ist und Eclipse basierend auf alten Dateien kompiliert wurde ... Denken Sie also daran, Kinder zu bereinigen, neu zu starten und zu kompilieren. .
Hunter-Orionnoir
6

Für mich war meine Paketzeichenfolge AndroidManifest.xmlfalsch (aus einem Tutorial kopiert). Stellen Sie sicher, dass die Paketzeichenfolge in dieser Datei mit Ihrer Hauptaktivität übereinstimmt, z

 package="com.example.app"

Eine einfache Möglichkeit, dies zu tun, besteht darin, die Datei AndroidManifest.xml auf der Registerkarte "Manifest" zu öffnen und in das Textfeld neben "Paket" einzugeben oder die Schaltfläche "Durchsuchen" zu verwenden.

Außerdem war die Paketzeichenfolge für meine Aktivität falsch, z

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

Ich habe (dumm) Wochen später den gleichen Fehler erhalten, als ich meinen Paketnamen umbenannt habe. Wenn Sie dies tun, stellen Sie sicher, dass Sie auch die AndroidManifest.xmlDatei aktualisieren .

satyrFrost
quelle
5

Ok, ich bin ziemlich erfahren auf dem iPhone, aber neu bei Android. Ich habe dieses Problem bekommen, als ich hatte:

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

diese Codezeile oben:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Vielleicht ist mir der Schlaf entzogen: P.

Aha
quelle
2
Mir ist auch der Schlaf entzogen
Oz Mayt
3

Ich bin kürzlich auf eine Neuinstallation von Eclipse gestoßen. Es stellte sich heraus, dass meine Compiler-Konformitätsstufe auf Java 1.7 eingestellt war und das Projekt 1.6 erforderlich war.

In Eclipse: Projekt -> Eigenschaften -> Java Compiler -> JDK-Konformität

Tapirboy
quelle
2

Dieses Problem wurde behoben, indem die Eigenschaft "Startmodus" der Aktivität festgelegt wurde.

Zorglube
quelle
2

Ein weiterer Grund für dieses Problem kann eine fehlende Bibliothek sein.

Gehen Sie zu Eigenschaften -> Android und überprüfen Sie, ob Sie die Bibliotheken korrekt hinzugefügt haben

Ayalcinkaya
quelle
1
Überprüfen Sie auch, ob die hinzugefügten Bibliotheken in Projekteigenschaften -> Java-Erstellungspfad -> Bestellen und Exportieren
Phil
2

Ich hatte das gleiche Problem, aber ich hatte meine Aktivität in der Manifest-Datei mit dem richtigen Namen deklariert.

Mein Problem war, dass ich keine Bibliotheken von Drittanbietern in einen "libs" -Ordner importieren musste und sie in meinem Projekt referenzieren musste (Rechtsklick, Eigenschaften, Java-Erstellungspfad, Bibliotheken, Jar hinzufügen ...).

Maria Mercedes Wyss Alvarez
quelle
2

Dies kann passieren, wenn sich Ihre Aktivitätsklasse in einem Standardpaket befindet. Ich habe es behoben, indem ich die Aktivitätsklasse in ein neues Paket verschoben habe. und Ändern der manifest.xml

Vor

activity android:name=".MainActivity" 

nach dem

activity android:name="new_package.MainActivity"
Satthy
quelle
Vielen Dank. Das war's.
Stephane
2

In meinem Fall habe ich versucht, die Komponenten (UI) bereits vor dem zu initialisieren onCreate für die Aktivität aufgerufen wird.

Stellen Sie sicher, dass Ihre UI-Komponenten in der folgenden onCreateMethode initialisiert / verknüpft sindsetContentView

NB: Dies ist mein erster Fehler beim Erlernen der Android-Programmierung.

Anup
quelle
2

Für mich war es anders als alles oben Genannte,

Die Aktivität wurde als abstrakt deklariert. Deshalb wird der Fehler angegeben. Sobald es entfernt wurde, funktionierte es.

Vorhin

     public abstract class SampleActivity extends AppcompatActivity{
     }

Nach dem Entfernen

     public class SampleActivity extends AppcompatActivity{
     }
Thriveni
quelle
1

Dies passiert mir ziemlich häufig, wenn ich das NDK verwende. Ich habe festgestellt, dass ich in Eclipse jedes Mal ein "Clean" durchführen muss, wenn ich ein "Clean" mache ndk-build. Hoffe es hilft jedem :)

kizzx2
quelle
1

Dieser Fehler tritt auch auf, wenn Sie einen Nichtstil verwenden, ihm ActionBarActivityjedoch zugewiesen haben AppCompat.

Um dies zu beheben, setzen Sie einfach Ihren übergeordneten App-Stil auf Theme.AppCompateinen solchen:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>
Ostkontentitan
quelle
Bom trabalho @Ostkontentitan! funcionou para mim, obrigado.
Emerson Barcellos
1

Klicken Sie mit der rechten Maustaste auf Projekt> Eigenschaften> Android> und versuchen Sie es mit einer anderen Version des Android, die ich früher mit Android 4.4 gemacht habe. Dann habe ich zu Android 4.3 gewechselt und es hat funktioniert!

nikhilgotan
quelle
1

Ich hatte das gleiche Problem (Aktivität kann nicht instanziiert werden):

ERSTER Grund:

Ich habe zugegriffen

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

Vor

mCamera = Camera.open();

Öffnen Sie also zuerst die Kamera und greifen Sie dann auf die Parameter zu.

ZWEITER Grund: Deklarieren Sie Ihre Aktivität in der Manifestdatei

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

DRITTER Grund: Deklarieren Sie die Kameraberechtigung in Ihrer Manifestdatei.

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

Hoffe das hilft

Sdembla
quelle
1

In meinem Fall habe ich versucht, das Facebook SDK einzubetten, und ich hatte die falsche Anwendungs-ID . somit tauchte der Fehler auf. In Ihrer Manifestdatei sollten Sie die richtigen Metadaten haben:

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

Wenn Sie Android Studio 2.3.3 und Android Studio 3.0.0 installiert haben, führt der Wechsel zwischen den beiden Entwicklungsprogrammen zu diesem Fehler. Dies liegt daran, dass es Situationen gibt, in denen in einem Programm unterstützte Klassen vom anderen nicht unterstützt werden und umgekehrt. Es ist wichtig, die Konsistenz zu gewährleisten, in welcher Version von Android Studio ein Projekt entwickelt wird.

Hexikel
quelle
1

Wie djjeckin einem Kommentar in dieser Antwort vorgeschlagen, habe ich es versäumt zu setzenpublic Modifikator für meine Klasse nicht angegeben.

Es sollte sein

public class MyActivity extends AppCompatActivity {

Es kann einigen wie mir helfen.

Shylendra Madda
quelle
1

Ich habe alle oben genannten Lösungen ausprobiert, aber nichts funktioniert für mich. nachdem ich statt nur extendAktivität hinzugefügt habeAppCompatActivity und gut funktioniert.

gebraucht

public class MainActivity extends Activity  

anstatt

public class MainActivity extends AppCompatActivity 

Ich weiß nicht, was das eigentliche Problem war.

Sagar Jethva
quelle
0

Dies passierte mir, als ich versuchte, eine ActivityVersion 2.2 auszuführen , die Importe aus Honeycomb verwendete, die in älteren Android-Versionen nicht verfügbar und auch nicht im v4-Support Package enthalten waren.

pqn
quelle
0

Ihre neue Aktivität hinzufügen AndroidManifest.xmlwie".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
NagarjunaReddy
quelle