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.