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

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>

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.