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 {

}
Était-ce utile?

La solution

  1. Ouvrir AndroidManifest.xml
  2. Rechercher une balise application
  3. Supprimer attribut android:name (si elle existe)
  4. 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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top