La classe di applicazione globale personalizzata si interrompe con "android.app.Application su cui non è possibile eseguire il cast"


141

Ho una classe globale personalizzata che assomiglia a questa

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Voglio preservare una stringa in questa classe tramite un'altra Activitynel suo onCreatemetodo.

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

Si interrompe sulla linea contrassegnata con errore: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Ho controllato il codice per cinque volte e non riesco a trovare l'errore da nessuna parte. Qualcuno può dirmi dove si trova l'errore ?!

Grazie

Risposte:


470

L'errore indica che il tipo di oggetto restituito da getApplicationè android.app.Application. Una possibile causa di ciò è che non è stato possibile definire l'applicazione nel manifest. Assicurati che il tuo manifest includa qualcosa nelle righe di:

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

8
Oh mio Dio, hai ragione. E ho perso l'ultima ora cercando di capire perché non vuole funzionare questa volta quando ha funzionato 100 volte prima :). Molte grazie!
sandalone,

8
2 anni dopo, salvando ancora vite umane
Vrashabh Irde,

30
Hey. Ho aggiunto questo al mio manifest. Tuttavia, mi sta ancora dando una ClassCastException
Somu

13
Aveva lo stesso problema pochi minuti fa su Android N, il manifest era corretto. Riavviato il dispositivo - l'eccezione era sparita. Strano ...
artkoenig

3
@Somu cache pulita, e chiudere la corsa istantanea, ricostruire il progetto, questo per me, penso che questo sia un bug di corsa istantanea.
LenaYan,

11

Un'altra soluzione per vecchi dispositivi Android o emulatori . È stata definita un'applicazione nel manifest:

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

ma hai ancora questo problema?

Prova a disabilitare la corsa istantanea:

  1. Disabilita una corsa istantanea
  2. Pulisci e ricostruisci il progetto
  3. Rimuovi l'app dal dispositivo e installala di nuovo senza l'esecuzione istantanea
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.