web-dev-qa-db-fra.com

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

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

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

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

139
rahul

C'est un problème d'intention.

Veuillez ajouter votre Activity dans votre AndroidManifest.xml.

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

126
Tanmay Mandal

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

Vous essayez peut-être de trouver la vue avant 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);
  }
  ...
}
48
SMUsamaShah

Il existe un autre moyen d’obtenir une Java.lang.RuntimeException: Impossible d’instancier l’activité ComponentInfo exception et l’activité que vous essayez de démarrer est abstract . J'ai fait cette erreur stupide une fois et il est très facile de l'ignorer.

42
Kevin

Image

Cela se produit également à cause de ce problème. J'ai décoché les bocaux qui devaient être exportés vers l'apk et la même chose s'est produite. Veuillez cocher les pots que votre application doit exécuter.

27
Haroon Dilshad

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:

  • Utiliser ActionBarSherlock en tant que bibliothèque
  • Utilisation d'Android-support-v4-r7-googlemaps.jar dans la bibliothèque ActionBarSherlock pour pouvoir utiliser un "fragment de carte" dans mon projet principal
  • Ajout du fichier jar au chemin de génération 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 du projet principal contenait la définition d'activité appropriée et toutes les propriétés appropriées.
  • Je n'ai eu aucune activité abstraite ou 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 ne pouvais pas la faire disparaître. Le problème cependant était légèrement différent sur un point:

  • Cela ne concerne qu'une nouvelle installation de l'application sur mon appareil. Chaque fois que l'application était installée pour la première fois, l'erreur était 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, puis construisais et déployais à nouveau à partir d'Eclipse, cela planterait. Construire/déployer une deuxième fois, cela fonctionnerait bien.

Comment j'ai résolu le problème:

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

  • Une fois que le fichier jar a été ajouté au chemin de génération, j'ai modifié l'ordre dans l'onglet de commande et d'export de Java> Chemin d'accès et exportation. ).

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

C'est peut-être une erreur totale de recrue, mais j'ai passé un bon bout de temps à fouiller dans les posts 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.

15
Kyle

Cette erreur peut également être le signe ultime d'une erreur stupide (comme lorsque je - je veux dire, tousser, comme lorsqu'un ami à moi qui m'a montré son code une fois) où ils essaient d'exécuter du code en dehors d'une méthode telle que d'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 cela:

SQLiteDatabase db;

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

Cela peut ne pas être pertinent pour la question, 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 ne pouvait pas reconnaître MainActivity dans un fichier .kt.

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

9
Muz

Je me suis débarrassé de ce problème en supprimant les dossiers Bin et Gen du projet (qui reviennent automatiquement lorsque le projet sera créé), puis en nettoyant le projet de -> Menu -> Projet -> Nettoyer.

Merci.

7
Jagdeep Singh

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

Si vous créez une nouvelle classe, n'essayez pas de la définir dans la méthode onCreate(Bundle savedInstanceState).

J'ai fait cette erreur stupide plusieurs fois. 

6
saji159

Pour moi, ma chaîne de package dans AndroidManifest.xml était incorrecte (copiée à partir d'un tutoriel) . Assurez-vous que la chaîne de package dans ce fichier est identique à celle où votre activité principale est, par exemple.

 package="com.example.app"

Pour ce faire, ouvrez facilement le fichier AndroidManifest.xml dans l'onglet "Manifeste", puis tapez-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">

(Bêtement) j'ai eu la même erreur plusieurs semaines plus tard lorsque j'ai renommé mon nom de paquet. Si vous faites cela, assurez-vous de mettre à jour le fichier AndroidManifest.xml également.

6
satyrFrost

Nettoyez simplement votre projet ou redémarrez Eclipse. Puis lancez votre projet. ça va marcher.

6
Emran Hamza

Ok, je suis assez expérimenté sur l'iPhone mais nouveau pour 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

5
iSee

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

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

3
Tapirboy

Cela peut arriver si votre classe d'activité est dans un package par défaut. Je l'ai corrigé en déplaçant la classe d'activité vers un nouveau package. et changer le fichier manifest.xml

avant

activity Android:name=".MainActivity" 

après

activity Android:name="new_package.MainActivity"
2
Satthy

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 les bibliothèques correctement

2
ayalcinkaya

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 besoin d'importer des bibliothèques tierces dans un dossier "libs" et que j'avais besoin de les référencer dans mon projet (clic droit, propriétés, chemin de construction Java, bibliothèques, Ajouter un fichier ...).

Vous avez ce problème et vous l'avez corrigé en définissant la propriété "Mode de lancement" de l'activité. 

2
Zorglube

Comme suggéré par djjeck dans le commentaire dans ceci réponse, j'ai omis de mettre le modificateur public pour ma classe.

CA devrait etre

public class MyActivity extends AppCompatActivity {

Cela peut aider certains comme moi.

1
Shylendra Madda

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 d’ouvrir la caméra d’abord, 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 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
Sdembla

Dans mon cas, j'essayais d'intégrer le SDK Facebook et j'avais le mauvais ID d'application; ainsi l'erreur se produisait. 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

Cette erreur se produit également lorsque vous utilisez ActionBarActivity mais que vous attribuez un style non AppCompat

Pour résoudre ce problème, il suffit de définir le parent de style de vos applications sur un Theme.AppCompat comme celui-ci:

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

Faites un clic droit sur projet> Propriétés> Android> et essayez avec une version différente d'Android plus tôt je le faisais avec Android 4.4, puis j'ai changé pour Android 4.3 et cela a fonctionné!

1
nikhilgotan

Cela m’arrive assez souvent lorsqu’on utilise le NDK. J'ai trouvé qu'il est nécessaire que je fasse un "nettoyage" dans Eclipse après chaque fois que je fais un ndk-build. J'espère que ça aide n'importe qui :)

1
kizzx2

J'ai essayé toutes les solutions ci-dessus mais rien ne fonctionne pour moi. après que je viens d’ajouter l’activité extend au lieu de AppCompatActivity et que je fonctionne bien.

utilisé

public class MainActivity extends Activity  

au lieu de

public class MainActivity extends AppCompatActivity 

je ne sais pas quel était le véritable problème.

1
Sagar Jethva

Si vous avez Android Studio 2.3.3 et Android Studio 3.0.0 installé, le passage du développement à l’autre programme entraînera cette erreur. En effet, il existe des situations dans lesquelles les classes prises en charge dans un programme ne sont pas prises en charge par l’autre et inversement. Il est important de maintenir la cohérence dans la version d'Android Studio utilisée pour développer un projet.

1
hexicle

Assurez-vous que toutes les activités de votre application sont correctement définies dans le fichier AndroidManifest.xml.

De plus, s’ils commencent par un chemin, assurez-vous que ce chemin existe.

Par exemple. cela ne fonctionnera pas:

<activity Android:name=".com.example.Android.networkusage.NetworkActivity" Android:label="@string/app_name" >

Si le nom de votre application est com.example.networkusage (notez le .Android manquant.)

Ou mieux encore, n'incluez pas de chemins lors de la définition d'une activité dans le manifeste. Ne mettez que leur nom (avec un point devant).

<activity Android:name=".NetworkActivity" Android:label="@string/app_name" >
0
Dzhuneyt

Parfois, isMinifyEnabled = false peut aider (assurez-vous de nettoyer le projet avant de le lancer)

0
Igor Wojda

Votre nouvelle activité ajouter AndroidManifest.xml comme ".NewActivity"

 </activity>        
    <activity Android:name=".NewActivity" />
0
NagarjunaReddy

De même, si vous récupérez quelque chose de intent d'une autre activité en utilisant getIntent dans l'activité en cours et définissez les données extraites avant/au-dessus de onCreate, cette exception est levée.

Pour par exemple. si je récupère une chaîne comme celle-ci 

final String slot1 = getIntent().getExtras().getString("Slot1");

et mettez cette ligne de code avant/au-dessus de onCreate, puis cette exception est levée.

0
Sash_KP

Dans mon cas, j'avais deux versions de "Android-support-v4.jar" dans le projet. Après avoir résolu ce problème (référence supplémentaire/incorrecte supprimée), le problème a été résolu.

0
ryaliscs

Dans mon cas, j'ai dû ajouter une nouvelle bibliothèque Android 6.0 en allant dans Fenêtre >> Préférences >> Java >> Chemin de construction >> Bibliothèques utilisateur >> Ajouter une bibliothèque >> Bibliothèque d'utilisateurs >> Nouveau

Nommez-le Android 6.0, puis cliquez sur OK. Après cela, ajoutez le fichier Android.jar que vous trouverez dans "sdklocation/plates-formes/Android-23/Android.jar".

Assurez-vous de faire tout cela dans le projet Android.

0
Eames

Cela m'est arrivé lorsque j'ai essayé d'exécuter une Activity sur 2.2 utilisant des importations Honeycomb non disponibles dans les anciennes versions d'Android et non incluses dans le package de support v4.

0
pqn

Il suffit de cliquer sur le fichier et de fermer le projet et de le rouvrir

OR

lorsque vous l'ouvrez, nettoyez le projet puis exécutez-le, cela fonctionne pour moi .....

ce problème est dû à changer le nom du paquet de l'application, j'ai rencontré ce problème quand je n'ai pas de solution puis dans la colère je ferme le projet alors je pense que yaar pourquoi ne pas un autre essai .... alors mon travail de projet ...

0
Zahid Hussain

Cela peut également arriver si vous avez deux projets avec le même nom de package et que vous avez exécuté l'un d'entre eux avant l'autre, je suppose donc que cela confond Eclipse. Pour moi, cela s'est produit lorsque j'ai copié un didacticiel Android dans Eclipse dans le même espace de travail tout en laissant les noms de package identiques, mais en y ajoutant ActionBarSherlock (ABS), par exemple.

 package="com.example.Android.whatever"

Ainsi, dans mon fichier AndroidManifest.xml, le projet de didacticiel qui se trouvait dans mon espace de travail et le projet de didacticiel copié avaient tous deux comme chaîne de package:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.Android.whatever"

    ....
</manifest>

Modifiez simplement le nom du paquet par refactoring (dans Eclipse, cliquez avec le bouton droit de la souris sur l’emballage dans l’onglet Explorateur de paquets> sélectionnez Réfracteur> sélectionnez Renommer ...) puis modifiez-le dans votre fichier AndroidManifest.xml et ailleurs .Java) 

0
nommer

Dans mon cas, j'essayais d'initialiser les composants (UI) avant même que la onCreate ne soit appelée pour l'activité.

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

NB: Ceci est ma première erreur en apprenant la programmation Android.

0
Anup

La plupart du temps, si le nom Activity a changé, cela a été reflété dans tout le projet, à l'exception du fichier AndroidManifest.xml

Il vous suffit d’ajouter le nom dans manifest manuellement.

<activity
Android:name="Activity_Class_Name"
Android:label="@string/app_name">
</activity>
0
Swapnil Kotwal

Ne fais pas comme ça

ImageView imageView=findViewById(R.id.imageView);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

Fais-le comme ça

ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView=findViewById(R.id.imageView);
0
Karthik Kompelli

vous pouvez avoir des erreurs dans vos domaines comme 

public class Search_costumer extends Activity {

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
}

donc mon conseil est d'effectuer toute l'initialisation dans la méthode onCreate pas directement dans vos champs 

résoudre comme ça 

public class Search_costumer extends Activity {

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();
}
}