web-dev-qa-db-fra.com

Android ClassNotFoundException

J'ai un problème avec l'une de mes applications et je me demandais si quelqu'un pourrait me donner une idée de ce qui le cause peut-être.

Je reçois un ClassNotFoundException , la ligne importante ci-dessous est

E/AndroidRuntime(21982): Caused by: Java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0

Maintenant, cette application est disponible depuis plus d'un an et il y a 2 jours, deux utilisateurs distincts m'ont contacté à propos de ce problème, l'un sur un HTC Wildfire (2.1) et l'autre sur le Samsung Galaxy S (?). Maintenant, je ne peux pas recréer ce problème sur mes périphériques (2.2 et 1.6) ou un émulateur (2.1) et je ne peux pas vraiment comprendre pourquoi cette classe ne peut pas être trouvée par le chargeur de classes. J'ai passé un certain temps à googler sans résultat, et j'espère que quelqu'un a des indications! Il semble que ce n’est que lorsqu’une activité est chargée qu’elle tente, lors du paramétrage de contentView, de gonfler une vue personnalisée appelée GoBoardView qui étend la classe View, il s’agit simplement de dessiner sur une toile et de ne pas utiliser de troisième. les librairies de parti ou toute autre classe qui aurait un choc packagename ou quoi que ce soit.

S'il vous plaît aider! Juste au cas où il s'agirait d'un problème de construction, je mets à jour tout mon SDK et ADT via Eclipse, car il compilait contre 1.6 et utilisait l'ancien ADT, mais je ne sais pas si cela vous aidera à penser qu'il vaut la peine d'essayer. Tout conseil serait super merci! (voir ci-dessous pour EDIT)

E/AndroidRuntime(21982): Java.lang.RuntimeException: Unable to start activity ComponentInfo{couk.doridori.goigoFull/couk.doridori.goigoFull.Board}: Android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2596)
E/AndroidRuntime(21982): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2621)
E/AndroidRuntime(21982): at Android.app.ActivityThread.access$2200(ActivityThread.Java:126)
E/AndroidRuntime(21982): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1932)
E/AndroidRuntime(21982): at Android.os.Handler.dispatchMessage(Handler.Java:99)
E/AndroidRuntime(21982): at Android.os.Looper.loop(Looper.Java:123)
E/AndroidRuntime(21982): at Android.app.ActivityThread.main(ActivityThread.Java:4603)
E/AndroidRuntime(21982): at Java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(21982): at Java.lang.reflect.Method.invoke(Method.Java:521)
E/AndroidRuntime(21982): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:860)
E/AndroidRuntime(21982): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:618)
E/AndroidRuntime(21982): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(21982): Caused by: Android.view.InflateException: Binary XML file line #14: Error inflating class couk.doridori.goigo.customUI.GoBoardView
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:576)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:618)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:407)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:320)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.inflate(LayoutInflater.Java:276)
E/AndroidRuntime(21982): at com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:207)
E/AndroidRuntime(21982): at Android.app.Activity.setContentView(Activity.Java:1629)
E/AndroidRuntime(21982): at couk.doridori.goigoFull.Board.onCreate(Board.Java:31)
E/AndroidRuntime(21982): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
E/AndroidRuntime(21982): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2544)
E/AndroidRuntime(21982): ... 11 more
E/AndroidRuntime(21982): Caused by: Java.lang.ClassNotFoundException: couk.doridori.goigo.customUI.GoBoardView in loader dalvik.system.PathClassLoader@446fc3d0
E/AndroidRuntime(21982): at dalvik.system.PathClassLoader.findClass(PathClassLoader.Java:243)
E/AndroidRuntime(21982): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:573)
E/AndroidRuntime(21982): at Java.lang.ClassLoader.loadClass(ClassLoader.Java:532)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createView(LayoutInflater.Java:466)
E/AndroidRuntime(21982): at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:565)
E/AndroidRuntime(21982): ... 22 more

MODIFIER

Bien, en recherchant certains des liens que les utilisateurs ont commentés en réponse à cette question, il semble que l’utilisation du mauvais contexte pour le chargement des activités puisse causer ce problème. Je trouve cela intéressant parce que un des deux journaux que j’ai envoyés ont cette exception précédée par 

W/ActivityManager( 1222): startActivity called from non-Activity context; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { flg=0x20000 cmp=couk.doridori.goigoFull/.Games }

ce qui est assez explicite - le problème est que je n'ai aucune idée de l'endroit où cette activité pourrait être démarrée à partir du moment où elle utilise un contexte de non activité, alors je suis un peu perplexe, pensant qu'il peut s'agir d'une tâche multitâche comme un caprice et sa remise au premier plan de quelque chose . Cela peut alors apparemment causer des problèmes avec classLoader. Si cela se produisait sur un téléphone d'utilisateurs, je ne vois pas pourquoi je ne peux pas reproduire ceci (et la plupart des autres utilisateurs ne peuvent pas non plus).

L’autre chose que j’ai trouvée à travers les liens, ce qui est intéressant, c’est que certaines personnes ont rencontré des problèmes dus à une "installation incorrecte d’apk", qui peuvent être résolus par une réinstallation, ce que j’ai demandé aux utilisateurs qui ont eu le problème d’essayer (qui En outre, il semble qu'une fois le problème rencontré (qui est sur la première utilisation), il sera persistant.

33
Dori

Je ne peux pas m'empêcher de remarquer que votre nom d'activité est couk.doridori.goigoFull.Board mais que votre classe View manquante est couk.doridori.goigo.customUI.GoBoardView ... il semble que vous ayez deux packages différents (goigo vs goigoFull).

Êtes-vous par hasard en train de faire des choses intelligentes avec des projets de bibliothèque? Vous voudrez être très prudent avec les noms de classe entièrement qualifiés dans le code et dans la mise en page XML ...

(Si ce n'est pas le cas, veuillez ajouter des informations supplémentaires sur la configuration de votre projet et coller également votre code XML de présentation sur lequel le présentateur s'étouffe.) 

33
Reuben Scratton

Je discutais déjà de ce problème ici: Android: impossible d'instancier l'activité/ClassNotFoundException mais nous n'avons pas trouvé de réponse définitive ... Cependant, la réponse de John J Smith sur l'utilisation correcte de Context est intéressante.

Certaines personnes ont également résolu leur problème sur ce fil et donnent quelques idées.

J'espère que cela t'aides...

(Au fait, je suis content de voir un autre programmeur de jeux Go!)

6
Dalmas

J'ai ajouté une mise en page personnalisée et commencé à voir les messages ClassNotFoundException après uniquement sur le package d'application signé, mais la version de développement fonctionnait parfaitement. J'utilisais ProGuard et la nouvelle mise en page que j'ai ajoutée ne figurait pas dans la liste "exclure" de la configuration de ProGuard. J'ai inclus la présentation personnalisée dans la liste d'exclusion de ProGuard et cela a résolu le problème pour moi.

3
Kiran

Je rencontre parfois ce problème lorsque je développe, généralement après avoir changé le nom du paquet Un nettoyage rapide du projet corrige le problème pour moi.

2
Dan

D'après mon expérience, le sdk Android a été mis à jour et le lien vers la bibliothèque de support doit être actualisé. Allez simplement dans Paramètres du projet> Android et pointez à nouveau vers la bibliothèque de support. 

1
Yaojin

Pour moi, le problème était une petite faute en majuscules… .. Je cherchais mon code pendant des heures où tout allait bien… .. Il y a eu un moment où j'ai examiné mes fichiers .xml - et c'était là:

Dans les fichiers Java, j’utilisais un ViewPager et, dans un vilain petit morceau du XML, j’ai perdu mes majuscules et taper viewPager par erreur. Evident, que celui-ci n'a pas pu être retrouvé ...

1

Il y a une autre chose qui cause "ClassNotFoundException". Il y a quelque temps, le projet Android a commencé à utiliser le répertoire libs pour les dépendances. Si un fichier jar se trouve dans le répertoire libs, il est automatiquement placé sur le chemin de classe, vous n'avez donc pas à l'ajouter dans les paramètres du projet. Cependant, les sources de "libs" ne peuvent pas avoir de sources attachées (ce qui est ridicule). Donc, si vous voulez attacher une source, vous déplacez un fichier jar de "libs" vers "lib" et vous l'ajoutez au chemin de classe. Vous pouvez joindre la source. Mais j'ai vu plusieurs fois que cela déclenche des exceptions ClassNotFoundExceptions sur mes classes. Remettre le pot en place résout le problème. 

1
Christine

J'ai eu le même problème. En fin de compte, il manquait simplement des tabulations dans la mise en page XML.

Avant:

    <org.osmdroid.views.MapView
    Android:id="@+id/mapview"
    Android:layout_width="fill_parent" 
    Android:layout_height="0dip"
    tilesource="MapquestOSM" 
    Android:layout_weight="1"
    />

Ensuite, avec indentation, la classe classNotFoundException n’apparut plus jamais et la carte s’affiche correctement:

    <org.osmdroid.views.MapView
        Android:id="@+id/mapview"
        Android:layout_width="fill_parent" 
        Android:layout_height="0dip"
        tilesource="MapquestOSM" 
        Android:layout_weight="1"
    />
1
roky

ceci est dû à la nouvelle version d'Eclipse ... supprimez toutes les dépendances externes de buildpath et rajoutez-le à nouveau à l'aide de l'onglet projet-> propriétés-> builspath-> bibliothèques. Maintenant, rajoutez toutes les bibliothèques de dépendances et sélectionnez tous les composants en cliquant sur ceux-ci dans la commande et dans l'onglet Projet du projet-> Propriétés-> Builspath-. cela fonctionnera bien!

0
rana