2017-07-15 5 views
0
私はこの拡張メソッドを持っているRxJava 2にRxJava 1から自分のプロジェクトを更新しています

は(私はKotlinを使用)が必要です1すべてがOKだった。しかし、私はobservablesをRxJava 2(Observable io.reactivex.Observable)の新しいObservableに置き換えたときにエラーが発生しました。今、IDEは、以下の戻り値の型必要があると述べている:RxJava 2はRxJava 1(Kotlin)とは異なる観察可能な戻り値の型

((Datasnashot) -> T)! 

代わりの

(Datasnapshot) -> T? 

を提供しますが、この異なる動作を引き起こす可能性がどのような任意のアイデアを持っていますか?それを修正するためにコードをどのように変更する必要がありますか?

答えて

2

RxJava 2 Observableは、いかなる方法でもnullを受け入れなくなりました。 mapラムダはT?を生成していますが、Tである必要があります。 DataSnapshot.getValue()リターンがnullの場合NPE(Observable.error()に包まれた)あなたは、入力が非nullであると仮定することができ、そしてあなたもDataSnapshot.getValue()が非nullであると仮定した場合、あなたのコードはもちろん

fun <T : DatabaseModel> Observable<DataSnapshot>.toObjectObservable(type: Class<T>): Observable<T> { 
    return this.map { 
     val data = it.getValue(type)!! 
     data.setId(it.key) 
     data 
    } 
} 

に短縮し、これはなります。あなたが望むならば、それを落とすなどして、特別に扱うことができます。

fun <T : DatabaseModel> Observable<DataSnapshot>.toObjectObservable(type: Class<T>): Observable<T> { 
    return this.flatMap { 
     val data = it.getValue(type) 
     data.?setId(it.key) 
     if (data != null) Observable.just(data) else Observable.empty() 
    } 
} 
関連する問題