Eigenschaft muss initialisiert oder abstrakt sein

Es muss eine dumme Frage sein, aber ich bin wirklich neu in Kotlin und ich habe keine Lösung gefunden.

Wie erkläre ich das Klassenfeld? Wie wir es in Java haben können:

protected SharedPreferences mSharedPreferences; 

Und später in onCreate() :

 mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) 

Jetzt kann ich es überall verwenden, wo ich will (in Unterklassen dieser Basisaktivität).

Ich versuche das selbe in Kotlin zu machen:

 protected var sharedPreferences : SharedPreferences 

Und in onCreate() :

 sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) 

Aber ich bekomme eine Warnung: "Eigentum muss initialisiert oder abstrakt sein"

  • Unit-Test auf Kotlin-Erweiterungsfunktion auf Android SDK-Klassen
  • Android Studio 2.3: Include nicht die Klasse org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
  • Kapt Build scheitert mit Dagger Android Prozessor
  • Was ist der beste Weg, um auf UI-Komponente in Android mit Kotlin zu deklarieren?
  • Render-Fehler in Android Studio 3.0 Layout-Editor
  • Variable 'runnable' muss initialisiert werden
  • Varargs Kotlin Java Interop funktioniert nicht richtig
  • Gibt es eine bequeme Möglichkeit, Parcelable Datenklassen in Android mit Kotlin zu erstellen?
  • One Solution collect form web for “Eigenschaft muss initialisiert oder abstrakt sein”

    Wenn Sie eine Eigenschaft außerhalb des Konstruktors initialisieren möchten , dann sind spät initialisierte Eigenschaften, was Sie suchen können. Deklariere die Eigenschaft mit dem lateinit Modifikator, der es erlaubt, den ansonsten benötigten Initialisierer zu überspringen und den Eigentumszugriff mit Ausnahme lateinit , bis ihm ein aussagekräftiger Wert zugewiesen ist:

     protected lateinit var sharedPreferences: SharedPreferences 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.