Android ClassCastException au démarrage de l'activité
-
27-09-2019 - |
Question
J'ai un programme d'activité simple android. essentiellement la classe étend seulement l'activité. Mais quand je commence j'obtenir un ClassCastException dans le constructeur de ma classe. Je n'ai pas même un constructeur défini, il doit être dans le constructeur de la superclasse qui est l'activité.
Malheureusement, le débogueur ne marche pas donner des informations détaillées sur quelle classe il tente de lancer.
voici le stacktrace:
Thread [<1> main] (Suspended (exception RuntimeException))
ActivityThread$PackageInfo.makeApplication(boolean, Instrumentation) line: 649
ActivityThread.handleBindApplication(ActivityThread$AppBindData) line: 4232
ActivityThread.access$3000(ActivityThread, ActivityThread$AppBindData) line: 125
ActivityThread$H.handleMessage(Message) line: 2071
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
et quand je regarde dans le RuntimeException je reçois:
detailMessage "Unable to instantiate application com.test.MyApp: java.lang.ClassCastException: com.test.MyApp" (id=830067694464)
le seul code est
package com.test;
import android.app.Activity;
public class MyApp extends Activity {
}
La solution
- Ouvrir
AndroidManifest.xml
- Rechercher une balise
application
- Supprimer attribut
android:name
(si elle existe) - Ajouter
android:name="android.app.Application"
attribut
est ce que je l'ai fait et le problème avait disparu.
P.S. À l'étape 4 utiliser votre nom de classe d'application personnalisée si vous en avez un (qui est facultatif)
Autres conseils
J'ai eu le même problème.
Dans mon cas, j'avais une classe que l'application prolongée qui a été référencé dans le fichier manifeste comme un attribut de la balise d'application.
Quand je re-factoré la classe Eclipse ne comprend pas la référence dans le manifeste (compréhensible, mais frustrant et prêter à confusion) qui a donné lieu à cette question.
Cela a également des liens avec la réponse dans Maxim, mais l'explication semble être la disparité.
Quand j'ai changé le nom d'attribut correspondant au fichier que je renommé le problème a été résolu.
i fait une erreur stupide,
my_textView = (<b>Button</b>) findViewById(R.id.tvMyTextView);
et cela a causé la ClassCastException ..
i a changé cela à l'évidence,
my_textView = (<b>TextView</b>) findViewById(R.id.tvMyTextView);
et il a travaillé ..
Je ne sais pas comment, mais tout ce que je peux dire est que ces erreurs stupides peuvent aussi causer le problème ci-dessus ..
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
ajouter ceci et afficher votre Manifest.xml complet
J'ai eu le même problème se produisant parfois, parfois apparemment déclenché par des éléments de commande de stocks dans une mise en page XML.
Si vous autorisez l'application à continuer d'exécuter après l'exception uncaught, vous devriez trouver que vous obtenez beaucoup plus utile stacktrace dans « adb logcat » que vous pouvez facilement sortir du débogueur au point où il arrête.
Cela vous permet habituellement à l'endroit où l'exception a effectivement eu lieu, ce qui est généralement pas l'endroit où il arrête dans le débogueur.
Dans mon cas, il semblait y avoir un décalage entre les ID de ressources - déplacer des choses dans le fichier XML semblait confondre des choses telles que quand je l'ai fait view.findViewById (R.id.something), il ne me revient la correct objet. Je chassait l'objet à un TextView, qui aurait dû être parfaitement valable en fonction du contenu de ma mise en page XML, mais il plantait.
Vous pouvez constater que vous avez réellement un bug où vous faites un casting invalide, ce qui va certainement provoquer cette exception se produise, mais dans mon cas forcer un environnement propre et reconstruire résolu le problème - il régénère les mises en page compilées et ressources ID à partir de zéro, et tout a fonctionné comme prévu.
Si vous utilisez google maps:
<uses-library android:name="com.google.android.maps" />
Rappelez-vous cette ligne. Ne peut pas croire je l'ai oublié et perdu beaucoup de temps.
Je suis d'accord avec la réponse de Mahesh .. Cela se produit en raison de l'attribution de la vue sans jeter ...
Cela aussi se produire si vous jetant un ImageButton Voir Button Voir ou autre Voir classe.
J'ai eu même problème, et je comprendre, que cela a causé un mauvais usage dans preferences.xml
<CheckBoxPreference android:key="@+id/string" />
devait être changement
<CheckBoxPreference android:key="string" />
eu un problème similaire avec un ClassCastException me disant que je ne pouvais pas jeter un coup EditText comme TextView. Je ne cherchais pas à. J'ai essayé de nettoyer le projet, mais a reçu plusieurs erreurs « fichier ne peut pas supprimer ... ». Fermé Eclipse, a rouvert, nettoyé le projet. Le problème a disparu. Il est clair que cela ne fonctionnera pas dans tous les cas, mais il est une possibilité.