La classe Application globale personnalisée est interrompue par "android.app.Application ne peut pas être castée vers"


141

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 souhaite conserver une chaîne dans cette classe via une autre Activitydans sa onCreateméthode.

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

Il casse 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 aucune erreur nulle part. Quelqu'un peut-il me dire où se trouve l'erreur?!

Merci

Réponses:


470

L'erreur indique que le type de l'objet renvoyé par getApplicationest android.app.Application. Une cause possible est que vous n’avez pas pu définir l’application dans le manifeste. Assurez-vous que votre manifeste inclut quelque chose dans les lignes de:

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

8
Oh mon Dieu, tu as raison. Et j'ai perdu la dernière heure à essayer de comprendre pourquoi il ne veut pas travailler cette fois-ci alors que cela fonctionnait 100 fois auparavant :). Merci beaucoup!
— sandalone

8
2 ans plus
— tard

30
Hey. J'ai ceci ajouté à mon manifeste. Cependant, il me donne toujours une ClassCastException
— Somu

13
Eu le même problème il y a quelques minutes sur Android N, le manifeste était correct. Redémarré l'appareil - l'exception a disparu. Strange ...
— artkoenig

3
@Somu nettoie le cache et ferme l'exécution instantanée, reconstruit le projet, cela dit pour moi, je pense que c'est un bogue d'exécution instantanée.
— LenaYan

11

Une autre solution pour les anciens appareils ou émulateurs Android . 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. Supprimez l'application de l'appareil et réinstallez-la sans exécution instantanée
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.