La clase de aplicación global personalizada se rompe con "android.app.Application no se puede enviar a"

141

Tengo una clase global personalizada que se ve así

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Quiero preservar una cadena en esta clase a través de otra Activityen su onCreatemétodo.

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

Se rompe en la línea marcada con error: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Revisé el código cinco veces y no puedo encontrar ningún error en ningún lado. ¿Alguien puede decirme dónde está el error?

Gracias

sandalone
fuente

Respuestas:

470

El error indica que el tipo del objeto devuelto por getApplicationes android.app.Application. Una posible causa de esto es que no pudo definir la aplicación en el manifiesto. Asegúrese de que su manifiesto incluya algo en las líneas de:

<application android:name=".MyApp"...
</application>
K-Ballo
fuente
8
Dios mío, tienes razón. Y he perdido la última hora tratando de descubrir por qué no quiere trabajar esta vez cuando funcionó 100 veces antes :). ¡Muchas gracias!
Sandalone
8
2 años después, todavía salva vidas
Vrashabh Irde
30
Oye. Tengo esto agregado a mi manifiesto. Sin embargo, todavía me está dando una ClassCastException
Somu
13
Tuve el mismo problema hace unos minutos en Android N, el manifiesto era correcto. Reinició el dispositivo: la excepción desapareció. Extraño ...
artkoenig
3
@Somu limpia el caché y cierra la ejecución instantánea, reconstruye el proyecto, esto está redactado para mí, creo que este es un error de la ejecución instantánea.
LenaYan
11

Otra solución para dispositivos Android o emuladores más antiguos . Definió una aplicación en el manifiesto:

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

pero aún tienes este problema?

Intenta deshabilitar la ejecución instantánea:

  1. Deshabilitar una ejecución instantánea
  2. Limpiar y reconstruir el proyecto.
  3. Elimine la aplicación del dispositivo e instálela nuevamente sin ejecución instantánea
Val
fuente