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

sandalone
la source

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>
K-ballo
la source
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
Val
la source