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.


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.


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

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.


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"/>

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.


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.


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.


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

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.


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.


6

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


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 .


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.


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


2

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


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


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


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"

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.


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

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 :)


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>

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!


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


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" />

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.


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.


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.


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.


0

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

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