Benutzerdefinierte globale Anwendungsklasse bricht mit "android.app.Application kann nicht umgewandelt werden in"

141

Ich habe eine benutzerdefinierte globale Klasse, die so aussieht

import android.app.Application;

public class MyApp extends Application {

    public String MainAct;

    public String getMainAct() {
        return MainAct;
    }

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

Ich möchte einen String in dieser Klasse über einen anderen Activityin seiner onCreateMethode beibehalten .

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

Es bricht auf der markierten Linie mit Fehler: Caused by: java.lang.ClassCastException: android.app.Application cannot be cast to com.xxx.yyy.global.MyApp

Ich habe den Code fünf Mal überprüft und kann nirgendwo einen Fehler finden. Kann mir jemand sagen, wo der Fehler liegt?!

Vielen Dank

Sandale
quelle

Antworten:

470

Der Fehler besagt, dass der Typ des von zurückgegebenen Objekts getApplicationist android.app.Application. Eine mögliche Ursache hierfür ist, dass Sie die Anwendung im Manifest nicht definiert haben. Stellen Sie sicher, dass Ihr Manifest Folgendes enthält:

<application android:name=".MyApp"...
</application>
K-Ballo
quelle
8
Oh mein Gott, du hast recht. Und ich habe letzte Stunde verloren, um herauszufinden, warum es diesmal nicht funktionieren will, wenn es 100 Mal zuvor funktioniert hat :). Vielen Dank!
Sandalone
8
2 Jahre später, immer noch Leben retten
Vrashabh Irde
30
Hallo. Ich habe dies zu meinem Manifest hinzugefügt. Es gibt mir jedoch immer noch eine ClassCastException
Somu
13
Hatte das gleiche Problem vor Minuten auf Android N, war das Manifest korrekt. Gerät neu gestartet - Ausnahme war weg. Seltsam ...
Artkoenig
3
@ Somu sauberen Cache und Instant Run schließen, Projekt neu erstellen, dies für mich formuliert, ich denke, dies ist ein Fehler von Instant Run.
LenaYan
11

Eine weitere Lösung für ältere Android-Geräte oder Emulatoren . Sie haben eine Anwendung im Manifest definiert:

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

aber du hast immer noch dieses Problem?

Versuchen Sie, den Sofortlauf zu deaktivieren:

  1. Deaktivieren Sie einen Sofortlauf
  2. Bereinigen Sie das Projekt und erstellen Sie es neu
  3. Entfernen Sie die App vom Gerät und installieren Sie sie erneut, ohne sie sofort auszuführen
Val
quelle