Warum getApplicationContext() im Konstruktor der Aktivität wirft null-Zeiger-Ausnahme?

Nachdem Sie einige Zeit damit verbracht Fehler-Jagd-es stellt sich heraus, dass :

public class MainActivity extends BaseActivity { //BaseActivity extends Activity

    public MainActivity() {
        super();
        getApplicationContext(); //NPE here
    }
}

Warum ? Wo ist dieser dokumentiert ?

Froyo

  • Nie einen Konstruktor implementieren, der auf eine Aktivität.
  • Es war ein service eigentlich 😀 Versorgung zu bieten, einige input - Verknüpfungen - Quelle links. Trotzdem sollte dies nicht sein/ist das nicht irgendwo dokumentiert ?
  • Sie versuchen, einen Wert, der noch nicht instanziiert wurden, die durch den Rahmen noch. Das ist, warum Sie haben Methoden wie onCreate(), wo es sicher ist, diese Werte verwenden.
  • werden in der Dokumentation - es ist anders, etwas zu haben, geben null zurück, und null werfen - vielleicht füllen Sie ein Problem ?
  • "Es war ein Dienst tatsächlich" -- der code, den Sie eingefügt haben oben zeigt eine Aktivität, die die Implementierung eines Konstruktors. "Jedenfalls sollte dies nicht sein/ist das nicht irgendwo dokumentiert ?" -- developer.android.com/reference/android/app/... "Aufgerufen, wenn die Aktivität gestartet wird. Dies ist, wo die meisten der Initialisierung gehen sollte: Aufruf von setContentView(int) zum aufblasen der Aktivität UI, mit findViewById(int) für die programmgesteuerte Interaktion mit widgets auf der Benutzeroberfläche aufrufen managedQuery() zum abrufen von Cursor für Daten angezeigt werden, etc."
  • NÖ, kein Problem. Jede Methode kann das werfen einer NullPointerException, es muss nicht deklariert werden. Und, auch WENN es null zurück, anstatt das werfen einer NullPointerException, Sie würde am Ende werfen die exception selbst später, wenn Sie versucht, zu verwenden, sagte null-Wert. Btw, Rückgabe einer null und wirft eine NPE sind begrifflich verschiedene Dinge.
  • That being said, ja, es sollte genannt werden mehr. Die Regel ist, zu warten, bis der erste lifecycle-Methode (onCreate() oder onReceive()) bei der Umsetzung einer Komponente.
  • Berufung war Class.newInstance() auf eine Service-Implementierung für den Zugriff auf einige Variablen und habe das - ich weiß, ich habe geschrieben eine Aktivität vor - es sollte das gleiche mit all-Kontext abgeleiteten Klassen - als ich es gepostet, wie dies für Klarheit - code war viel mehr kompliziert - getSystemService() wirft auch btw - danke für den link
  • Ich weiß - und Nein, ich denke, dieses Verhalten ist nicht besonders intuitiv. Eine Methode soll nicht zu werfen, eine ungeprüfte Ausnahme sei denn, A) wenn es ein bug ist oder B) man nutzt es der falsche Weg - aber dieser falsche Weg und sollte in den docs - wie in den meisten Klassen der api in java (wirft NPE wenn argument null ist, etc) - und ich in der Regel auf null prüfen, so würde ich (wahrscheinlich) nicht fallen Rückgabewert null (ich weiß, es unterscheidet sich von einem NPE!)

InformationsquelleAutor Mr_and_Mrs_D | 2013-04-14
Schreibe einen Kommentar