java.lang.RuntimeException: impossible d'instancier l'activité ComponentInfo


151

J'essayais d'exécuter un exemple de code Lors du lancement de l'application dans l'émulateur Android 1.5, j'ai eu ces erreurs .... Quelqu'un a un indice ..?

ERREUR de 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

Edit Cette erreur arrive à la plupart des débutants, le fait est que vous devez ajouter toutes vos activités dans le fichier Manifest.


merci Dan Breslau ... Ça a l'air mieux maintenant .. comment faire ça?
rahul

1
Désolé les gars ... désolé d'avoir perdu votre temps .. J'ai juste oublié d'ajouter la nouvelle classe au fichier Manifest ..
rahul le

1
la mise à jour de tous mes outils (eclipse & sdk manager) l'a corrigé pour moi, ainsi que l'ajout d'une bibliothèque de support Android au projet
Hayden Thring

Réponses:


137

C'est un problème de votre intention.

Veuillez ajouter votre Activitydans votre AndroidManifest.xml.

Lorsque vous souhaitez créer une nouvelle activité, vous devez l'enregistrer dans votre AndroidManifest.xml.


4
J'ai une classe qui ne prolonge pas l'activité, contient juste quelques fonctions communes; mais j'obtiens toujours cette exception; Pourquoi?
Manoj Kumar

Dans mon projet, il est dit que la classe n'est pas publique lorsque vous regardez le nom android: dans un fichier xml. Lorsque j'ajoute public avant la classe dans l'activité principale, l'application s'exécute sans problème. Bizarre.
Codebeat

J'ai eu ce problème dans une application native que je développais .. j'ai ajouté une autre méthode dans la classe d'activité, et j'ai commencé à obtenir cette erreur .. pour moi, une reconstruction propre + l'a résolu ..
ashishsony

6
Une autre option est que votre activité se trouve dans le manifeste, mais elle est déclarée comme abstract(j'ai fait cette erreur lors du refactoring et le message d'erreur n'aide pas beaucoup).
Czechnology

59

Vous essayez peut-être de trouver la vue précédente onCreate()qui est incorrecte.

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, merci mec. Tu es un sauveur. C'est assez idiot mais merci beaucoup. Cela me hantait depuis une semaine maintenant.
Meain

faisait la même erreur;)
Sumit Jha

Même erreur ici aussi. Merci
Pooja

53

Il existe un autre moyen d'obtenir une exception java.lang.RuntimeException: impossible d'instancier une exception ComponentInfo d'activité et c'est l'activité que vous essayez de démarrer est abstraite . J'ai fait cette erreur stupide une fois et c'est très facile à oublier.


13
De plus, l'activité doit être publique (c'était mon erreur).
djjeck

Désolé de vous déranger deux ans plus tard, mais je me demandais pourquoi vous ne pouvez pas démarrer une activité abstraite?
BenjaminFranklin

2
@BenjaminFranklin Une classe abstraite signifie qu'elle n'est pas complète, il manque des parties. Le préfixe d'une classe avec le mot-clé abstract signifie qu'elle ne peut pas être instanciée directement, mais uniquement par héritage: et une autre classe implémentant les fonctionnalités manquantes de la classe abstraite.
Kit

J'ai déjà hérité de la classe abstraite mais toujours incapable de travailler. Pouvez-vous expliquer plus en détail?
Mohammedsalim Shivani

53

Dans mon cas, j'ai oublié d'ajouter la bibliothèque google maps

<application>
    ....

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

Vérifiez également que vous ne manquez pas le point précédent avant le chemin d'activité

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

2
Merci, @Maragues !! C'était le même problème! Vous avez résolu mon problème. :)
cmcromance

27

Image

Cela arrive également à cause de ce problème. J'ai décoché les jars qui devaient être exportés vers l'apk et la même chose s'est produite. Veuillez cocher les fichiers JAR dont votre application a besoin pour s'exécuter.


Il est important de voir ce problème et d'essayer correctement chaque composant de dépendance. Par exemple, sur Android Studio (ou Intellij IDEA), sélectionnez la bonne étendue pour les dépendances (Fourni, Compiler, ...). Dans mon cas, changez fourni à Compiler et fonctionne très bien.
dayanruben

15

J'ai rencontré ce problème aussi, mais d'une manière légèrement différente. Voici mon scénario:

Détail de l'application:

  • Utilisation d'ActionBarSherlock comme bibliothèque
  • Utilisation de android-support-v4-r7-googlemaps.jar dans la bibliothèque ActionBarSherlock afin que je puisse utiliser un "fragment de carte" dans mon projet principal
  • Ajout du fichier jar au chemin de construction de mon projet principal
  • Inclus le <uses-library android:name="com.google.android.maps" />dans les manifestes du projet de bibliothèque et de mon projet principal (cela peut ne pas être nécessaire dans la bibliothèque?)
  • Le manifeste dans le projet principal avait la définition d'activité appropriée et toutes les propriétés appropriées
  • Je n'avais pas d'activité abstraite ni aucun des autres pièges que j'ai vus sur Stack Overflow concernant ce problème.

Cependant, j'ai toujours rencontré l'erreur décrite dans le message d'origine et je n'ai pas pu la faire disparaître. Le problème était cependant légèrement différent sur un point:

  • Cela n'a affecté qu'une nouvelle installation de l'application sur mon appareil. Chaque fois que l'application est installée pour la première fois, j'obtiens l'erreur précédée de plusieurs "avertissements" de: Impossible de résoudre la superclasse de FragmentActivity
  • Ces avertissements remontent à la bibliothèque ActionBarSherlock
  • L'application forcerait la fermeture et le crash.
  • Si j'ai immédiatement reconstruit et redéployé l'application, cela a bien fonctionné.
  • La seule fois où il s'est écrasé était sur une installation totalement nouvelle. Si je désinstallais l'application, que je la construisais et la déployais à nouveau à partir d'Eclipse, elle planterait. Construisez / déployez une deuxième fois, cela fonctionnerait bien.

Comment je l'ai réparé:

  • Dans le projet de bibliothèque ActionBarSherlock, j'ai ajouté le fichier android-support-v4-r7-googlemaps.jar au chemin de construction
  • Cette seule étape n'a pas résolu le problème

  • Une fois le jar ajouté au chemin de construction, j'avais changé l'ordre dans l'onglet Chemin de construction Java> Ordre et exporter - j'ai défini le JAR sur le premier élément de la liste (c'était le dernier après les éléments / src et / gen ).

  • J'ai ensuite reconstruit et redéployé l'application sur mon appareil - cela a fonctionné comme prévu sur une nouvelle installation. Juste pour être certain, je l'ai désinstallé à nouveau 2-3 fois et réinstallé - toujours fonctionné comme prévu.

Cela peut être une erreur totale de débutant, mais j'ai passé pas mal de temps à fouiller dans les messages et mon code pour le comprendre, alors j'espère que cela pourra être utile à quelqu'un d'autre. Peut ne pas résoudre toutes les situations, mais dans ce cas particulier, cela a fini par être la solution à mon problème.


Merci! Cela a fonctionné pour moi quand j'ai eu ce problème lors de l'utilisation de googles admob sdk exemple "adcatalog" et obtenait cette erreur. Une note importante est de cocher les cases à côté des bibliothèques. Dans mon cas, support et jars admobsdk.
jsmars

14

Cela peut ne pas être pertinent pour la question réelle, mais dans mon cas, j'ai essayé d'implémenter Kotlin et laissé de côté apply plugin: 'kotlin-android'. L'erreur s'est produite car il n'a pas pu reconnaître MainActivity en tant que fichier .kt.

J'espère que ça aide quelqu'un.


1
Ajoutez également classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONdans la construction principale.gradle
Rajkiran

11

Cette erreur peut aussi être le signe ultime d'une erreur stupide (comme quand je - je veux dire, tousse, comme quand un de mes amis qui m'a montré son code une fois) où ils essaient d'exécuter du code en dehors d'une méthode comme essayer de le faire :

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

plutôt que ceci:

SQLiteDatabase db;

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

1
Une aide énorme. Correction de mes problèmes et m'a conduit à créer ma première application Android entièrement fonctionnelle
TheUnCola

7

Je me suis débarrassé de ce problème en supprimant le dossier Binet Gendu projet (qui revient automatiquement lorsque le projet sera construit), puis en nettoyant le projet de -> Menu -> Projet -> nettoyer.

Merci.


6

Dans mon cas, je n'ai pas défini le setContentView(R.layout.main);

Si vous créez une nouvelle classe, ne la définissez pas dans la onCreate(Bundle savedInstanceState)méthode on.

J'ai fait cette stupide erreur à plusieurs reprises.


6

Nettoyez simplement votre projet de travail ou redémarrez eclipse. Ensuite, lancez votre projet. ça va marcher.


Tant de fois, cela s'est produit ... Maintenant, il ne peut pas résoudre un fichier IADL, ce qui est probablement la racine du problème et eclipse était en train de se compiler sur la base d'anciens fichiers ... alors n'oubliez pas de nettoyer, redémarrer et compiler les enfants ... .
Hunter-Orionnoir

6

Pour moi, la chaîne de mon package AndroidManifest.xmlétait incorrecte (copiée à partir d'un didacticiel). Assurez-vous que la chaîne de package dans ce fichier est la même que celle de votre activité principale, par exemple

 package="com.example.app"

Pour ce faire facilement, ouvrez le fichier AndroidManifest.xml dans l'onglet "Manifeste" et saisissez-le dans la zone de texte en regard de Package ou utilisez le bouton Parcourir.

De plus, la chaîne de package pour mon activité était incorrecte, par exemple

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

J'ai (bêtement) eu la même erreur des semaines plus tard lorsque j'ai renommé le nom de mon package. Si vous faites cela, assurez-vous également de mettre à jour le AndroidManifest.xmlfichier.


5

Ok, je suis assez expérimenté sur l'iPhone mais nouveau sur Android. J'ai eu ce problème quand j'ai eu:

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

cette ligne de code ci-dessus:

@Override
public void onCreate (Bundle savedInstanceState) {
}

Peut-être que je suis privé de sommeil: P


2
Je suis également privé de sommeil
Oz Mayt

3

J'ai récemment rencontré cela avec une nouvelle réinstallation d'Eclipse. Il s'avère que le niveau de conformité de mon compilateur a été défini sur Java 1.7 et le projet requis 1.6.

Dans Eclipse: Projet -> Propriétés -> Compilateur Java -> Conformité JDK


2

Vous avez ce problème et l'a résolu en définissant la propriété "mode de lancement" de l'activité.


2

Une autre raison de ce problème peut être une bibliothèque manquante.

Allez dans Propriétés -> Android et vérifiez que vous ajoutez correctement les bibliothèques


1
Vérifiez également que les bibliothèques ajoutées ont une coche contre elles dans Propriétés du projet -> Chemin de construction Java -> Ordre et exporter
Phil

2

J'ai eu le même problème, mais mon activité a été déclarée dans le fichier Manifest, avec le nom correct.

Mon problème était que je n'avais pas à importer de bibliothèques tierces dans un dossier "libs", et j'avais besoin de les référencer dans mon projet (clic droit, propriétés, chemin de construction Java, bibliothèques, ajouter un pot ...).


2

Cela peut se produire si votre classe d'activité se trouve dans un package par défaut. Je l'ai corrigé en déplaçant la classe d'activité vers un nouveau package. et en changeant le manifest.xml

avant

activity android:name=".MainActivity" 

après

activity android:name="new_package.MainActivity"

Merci. c'était ça.
Stephane

2

Dans mon cas, j'essayais d'initialiser les composants (UI) avant même que le onCreatesoit appelé pour l'activité.

Assurez-vous que vos composants d'interface utilisateur sont initialisés / liés dans la onCreateméthode aprèssetContentView

NB: C'est ma première erreur lors de l'apprentissage de la programmation Android.


2

Pour moi, c'était différent de tout ce qui précède,

L'activité a été déclarée comme abstraite, c'est pourquoi donner l'erreur. Une fois retiré, cela a fonctionné.

Plus tôt

     public abstract class SampleActivity extends AppcompatActivity{
     }

Après le retrait

     public class SampleActivity extends AppcompatActivity{
     }

1

Cela m'arrive assez fréquemment lors de l'utilisation du NDK. J'ai trouvé qu'il me fallait faire un "Clean" dans Eclipse après chaque fois que j'en fais un ndk-build. J'espère que cela aide n'importe qui :)


1

Cette erreur se produit également lorsque vous utilisez ActionBarActivitymais attribuez un AppCompatstyle non .

Pour résoudre ce problème, définissez simplement le style de parent de votre application sur un parent Theme.AppCompatcomme celui-ci:

<!-- 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

Faites un clic droit sur projet> propriétés> android> et essayez avec une version différente de l'android que je faisais plus tôt avec Android 4.4, puis je suis passé à Android 4.3 et cela a fonctionné!


1

J'ai eu le même problème (impossible d'instancier l'activité):

PREMIÈRE raison:

J'accédais

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

avant

mCamera = Camera.open();

La bonne façon de faire est donc d'ouvrir d'abord la caméra, puis d'accéder aux paramètres.

DEUXIÈME raison: déclarez votre activité dans le fichier manifeste

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

TROISIÈME raison: déclarez l'autorisation de la caméra dans votre fichier manifeste.

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

J'espère que cela t'aides


1

Dans mon cas, j'essayais d'intégrer le SDK Facebook et j'avais le mauvais ID d'application ; ainsi l'erreur surgissait. Dans votre fichier manifeste, vous devriez avoir les métadonnées appropriées:

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

1

Si Android Studio 2.3.3 et Android Studio 3.0.0 sont installés, le basculement entre les deux programmes de développement provoquera cette erreur. C'est parce qu'il existe des situations où les classes prises en charge dans un programme ne sont pas prises en charge par l'autre et vice versa. Il est important de maintenir la cohérence dans la version d'Android Studio utilisée pour développer un projet.


1

Comme suggéré par djjecken commentaire dans cette réponse, j'ai manqué de mettre un publicmodificateur pour ma classe.

Ça devrait être

public class MyActivity extends AppCompatActivity {

Cela peut aider certains comme moi.


1

J'ai essayé toutes les solutions ci-dessus mais rien ne fonctionne pour moi. après je viens d'ajouter une extendactivité au lieu de AppCompatActivityet fonctionne bien.

utilisé

public class MainActivity extends Activity  

au lieu de

public class MainActivity extends AppCompatActivity 

Je ne sais pas quel était le vrai problème.


0

Cela m'est arrivé lorsque j'ai essayé d'exécuter un Activitysous 2.2 qui utilisait des importations de Honeycomb non disponibles dans les anciennes versions d'Android et non incluses dans le package de support v4 non plus.


0

Votre nouvelle activité ajouter AndroidManifest.xmlcomme".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.