firebaseからデータを取得するための一般的な方法を書いていますか?場合によっては、nullを戻すことが有効であり、そうでない場合は、汎用のparamがnullableかどうかを確認することが可能ですか?Kotlin - 汎用パラメータがオプションかどうかを確認しますか?
元
reference.obsrveObject(User.class)
nullが
reference.obsrveObject(User?.class)
NULL値で
fun DatabaseReference.observeSingleEvent(): Observable<DataSnapshot?> {
return Observable.create { subscriber ->
val valueEventListener = object: ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot?) {
subscriber.onNext(snapshot)
subscriber.onCompleted()
}
override fun onCancelled(error: DatabaseError?) {
subscriber.onError(FirebaseDatabaseThrowable(error))
}
}
addListenerForSingleValueEvent(valueEventListener)
}
}
fun <T>DatabaseReference.obsrveObject(clazz: Class<T>): Observable<T> {
return observeSingleEvent().map { snapshot ->
if (snapshot != null) {
snapshot.getValue(clazz)
}
else {
// if clazz is nullable return null
// if clazz is not nullabel throw
throw Exception("")
}
}
}
ありがとうございます。返された結果は、オプションのタイプオブザーバブルでなければなりませんか? – aryaxt
'null'を返すには、ObservableまたはObservable ?を返す必要があります。後でしたい場合は、 'nullを返す 'ことができるはずです。 –
mfulton26
私は必要に応じてこれをオプションとして定義できると思っていましたが、これは迅速に可能ですが、Kotlinにはありませんか?たとえば、データ、データ、そのようにジェネリック型は必要に応じてユーザーとしてオプションまたは必須として定義することができます –
aryaxt