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.