2016-07-10 7 views
4

私はKotlinからFirebaseデータベース内のオブジェクトを保存しようとしています デフォルトの空のコンストラクタを用意して、値をnullableとして指定してください。 。kotlinオブジェクト用の空のコンストラクタfirebaseを使用する

私のクラス:

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

Firebaseプッシュ:

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

エラー:

is missing a constructor with no arguments

は、このためのより良い解決策はありますか?

答えて

16

使用デフォルト引数:

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

(また、valを使用することを検討してください)。

+1

'val'は不変です。デシリアライザは実際の値を設定することができず、同じ(デフォルト)値を持つオブジェクトがたくさんあることになります。 – papageorgiouk

0

空のコンストラクタをVideoクラスに追加する必要があります。これは、Firebaseでクラスを使用できるようにするために必要です。

+0

しかし、それはnull可能な型といくつかの矛盾を作成していないと物事はこの要件のちょうどBCの奇妙な設計になる? – Caipivara

+0

私はそれについてはわからない、あなたはテストする必要があります。その要件はFirebaseのドキュメントに記載されています。 – PaulNunezM

3

私はそれがFirebaseで動作するかどうかテストしたが、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.

は、だから私はあなたのためのパラメータなしのコンストラクタを生成するすべてのコンストラクタのパラメータのデフォルト値を適用することで、と仮定します。

+1

はい、動作します! – sokarcreative

関連する問題