Niestandardowa globalna klasa Application zrywa z „android.app.Application nie można przesłać do”

141

Mam niestandardową klasę globalną, która wygląda tak

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Chcę zachować ciąg w tej klasie przez kolejny Activityw swojej onCreatemetodzie.

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

Przerywa w zaznaczonej linii z błędem: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Sprawdziłem kod pięć razy i nigdzie nie mogę znaleźć błędu. Czy ktoś może mi powiedzieć, gdzie jest błąd ?!

Dzięki

sandalone
źródło

Odpowiedzi:

470

Błąd stwierdza, że ​​typ obiektu zwróconego przez getApplicationto android.app.Application. Możliwą przyczyną jest to, że nie udało się zdefiniować aplikacji w manifeście. Upewnij się, że Twój manifest zawiera coś z następujących wierszy:

<application android:name=".MyApp"...
</application>
K-ballo
źródło
8
O mój Boże, masz rację. I straciłem ostatnią godzinę, próbując dowiedzieć się, dlaczego tym razem nie chce działać, skoro wcześniej działało 100 razy :). Wielkie dzięki!
sandalone
8
2 lata
później
30
Hej. Dodałem to do mojego manifestu. Jednak nadal daje mi ClassCastException
Somu
13
Miałem ten sam problem kilka minut temu na Androidzie N, manifest był poprawny. Zrestartowałem urządzenie - wyjątek zniknął. Dziwne ...
artkoenig
3
@Somu wyczyść pamięć podręczną i zamknij natychmiastowe uruchamianie, przebuduj projekt, to sformułowane dla mnie, myślę, że jest to błąd natychmiastowego uruchamiania.
LenaYan
11

Kolejne rozwiązanie dla starszych urządzeń z Androidem lub emulatorów . Zdefiniowałeś aplikację w manifeście:

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

ale nadal masz ten problem?

Spróbuj wyłączyć natychmiastowe uruchamianie:

  1. Wyłącz natychmiastowy bieg
  2. Wyczyść i odbuduj projekt
  3. Usuń aplikację z urządzenia i zainstaluj ją ponownie bez natychmiastowego uruchamiania
Val
źródło