2017-12-01 11 views
1

最近RxJavaを学習しました。私はオペレータについて学んでいます。これは私のコードです:フィルタrxjavaが動作しない

tvText = findViewById(R.id.tvText) 

val observable2 = Observable.just(1, 2, 3, 4, 5, 6) 
observable2.filter { i -> 
    //filter genap 
    i!! 
    i % 2 == 0 
} 

tvText.setOnClickListener { 
    observable2.subscribe(object: Subscriber<Int>() { 
     override fun onNext(t: Int?) { 
      Toast.makeText([email protected], t.toString(), Toast.LENGTH_SHORT).show() 
     } 

     override fun onError(e: Throwable?) { 
      e!!.printStackTrace() 
     } 

     override fun onCompleted() { 
      Toast.makeText([email protected], "Complete", Toast.LENGTH_SHORT).show() 
     } 
    }) 
} 

問題はフィルターが機能していないことです。トーストはすべての番号を表示します。私のコードに何が問題なのですか?

答えて

1

問題は、元のobservable2を使用していて、フィルタされたものではありません。 filter関数は、呼び出されたObservableを変更せず、代わりに新しい値を返します。

だから、あなたのコードを修正するために、新しい変数にフィルタ結果を保存して、代わりに、元の観測可能で、それを使用します。

val filteredObservable2 = observable2.filter { i -> 
    i % 2 == 0 
} 

tvText.setOnClickListener { 
    filteredObservable2.subscribe(object: Subscriber<Int>() { 
     /*...*/ 
    } 
} 
関連する問題