A classe global personalizada do aplicativo é interrompida com "android.app.Application não pode ser convertido para"

141

Eu tenho uma classe global personalizada que se parece com isso

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Eu quero preservar uma string nesta classe através de outra Activityem seu onCreatemétodo.

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

Ele quebra na linha marcada com erro: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Eu verifiquei o código cinco vezes e não consigo encontrar nenhum erro. Alguém pode me dizer onde está o erro ?!

obrigado

sandalone
fonte

Respostas:

470

O erro afirma que o tipo do objeto retornado por getApplicationé android.app.Application. Uma possível causa para isso é que você não conseguiu definir o aplicativo no manifesto. Verifique se o seu manifesto inclui algo nas linhas de:

<application android:name=".MyApp"...
</application>
K-ballo
fonte
8
Oh meu Deus, você está certo. E eu perdi a última hora tentando descobrir por que não quer funcionar desta vez quando funcionou 100 vezes antes :). Muito obrigado!
Sandalone 15/05
8
2 anos depois, a vida ainda poupança
Vrashabh Irde
30
Ei. Eu tenho isso adicionado ao meu manifesto. No entanto, ele ainda está me dando uma ClassCastException
Somu
13
Teve o mesmo problema minutos atrás no Android N, o manifesto estava correto. Reiniciou o dispositivo - a exceção desapareceu. Strange ...
artkoenig 16/10
3
@ Somu limpar cache, e fechar a execução instantânea, reconstruir projeto, esta redigida para mim, acho que isso é um bug de execução instantânea.
LenaYan
11

Outra solução para dispositivos ou emuladores Android mais antigos . Você definiu um aplicativo no manifesto:

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

mas você ainda tem esse problema?

Tente desativar a execução instantânea:

  1. Desativar uma execução instantânea
  2. Limpar e reconstruir o projeto
  3. Remova o aplicativo do dispositivo e instale-o novamente sem a execução instantânea
Val
fonte