150 votes

La classe d'application globale personnalisée est interrompue par le message "Android.app.Application cannot be cast to".

J'ai une classe globale personnalisée qui ressemble à ceci

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

    public void setMainAct(String mainAct) {
        MainAct = mainAct;
    }
}

Je veux préserver une chaîne de caractères dans cette classe via une autre Activity dans son onCreate méthode.

    String local = "myLocalVariable";
    ((MyApp) getApplication()).setMainAct(local); //breaks here!!!
    String name = ((MyApp) getApplication()).getMainAct();

Il se rompt sur la ligne marquée avec erreur : Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

J'ai vérifié le code cinq fois et je ne trouve d'erreur nulle part. Quelqu'un peut-il me dire où se trouve l'erreur ?

Remerciements

516voto

K-ballo Points 44794

L'erreur indique que le type de l'objet renvoyé par getApplication est android.app.Application . Une cause possible de ce problème est que vous n'avez pas défini l'application dans le manifeste. Assurez-vous que votre manifeste contient quelque chose du genre :

<application android:name=".MyApp"...
</application>

17voto

p.Valery Points 622

Une autre solution pour appareils Android plus anciens ou émulateurs . Vous avez défini une application dans le manifeste :

    <application 
           android:name=".MyApp"...
    </application>

mais vous avez toujours ce problème ?

Essayez de désactiver l'exécution instantanée :

  1. Désactiver une exécution instantanée
  2. Nettoyer et reconstruire le projet
  3. Supprimer l'application de l'appareil et l'installer à nouveau sans Instant run

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X