2016-07-10 3 views
4

Ich versuche, ein Objekt in Firebase-Datenbank von Kotlin, zu speichern Ich fühle mich nicht richtig, einen leeren Standardkonstruktor und Werte wie nullable setzen, müssen alle meine Code-BC von diesem ändern .Empty Konstruktor für Kotlin-Objekt Firebase zu verwenden

Meine Klasse:

class Video(var id: String, var url: String, var owner: User) : { 
    constructor() : this("", "", User("", "", "")) 
} 

Firebase Push:

FirebaseDatabase.getInstance().reference.child("public").push().setValue(video) 

Fehler:

is missing a constructor with no arguments

Gibt es eine bessere Lösung?

Antwort

16

Standard verwenden Argumente:

class Video(var id: String = "", var url: String = "", 
    var owner: User = User("", "", "")) 

(auch betrachten val verwenden).

+1

'val' ist unveränderlich. Der Deserializer wird nicht in der Lage sein, die tatsächlichen Werte festzulegen, und Sie werden eine Gruppe von Objekten mit den gleichen (Standard) Werten haben. – papageorgiouk

0

Sie müssen der Videoklasse einen leeren Konstruktor hinzufügen. Dies ist erforderlich, um Klassen mit Firebase verwenden zu können.

+0

aber das nicht einige Inkonsistenz mit Nullable-Typen erstellen und die Dinge werden seltsam bc von dieser Anforderung entwickelt? – Caipivara

+0

Ich bin mir nicht sicher, Sie müssen testen. Diese Anforderung wird in der Firebase-Dokumentation erläutert. – PaulNunezM

3

habe ich nicht getestet, ob es mit Firebase funktioniert, aber nach dem kotlin documentation,

NOTE: On the JVM, if all of the parameters of the primary constructor have default values, the compiler will generate an additional parameterless constructor which will use the default values. This makes it easier to use Kotlin with libraries such as Jackson or JPA that create class instances through parameterless constructors.

Also nehme ich an, um die Standardwerte für alle Konstruktorparameter Anwendung wird für Sie den parameterlosen Konstruktor erzeugen.

+1

Ja, es funktioniert !!! – sokarcreative