RxJavaを用いた実装例

この項ではRxJavaを用いた実装例を紹介します。

SDKの初期化

通常の実装と同じくSDKの初期化を行います。

    RFP.init(context, mediaId)
    

    Observableの生成

    RFPをObservableでラップし、それを返すメソッドを定義します。

      fun createAdObservable(context: Context, spotId: String, count: Int, positions: List<Int>?)
              : Observable<RFPInstreamInfoModel> {
          return Observable.create {
              val loader = RFPInstreamAdLoader.Builder(spotId)
                      .count(count)
                      .positions(positions)
                      .onSuccess { items ->
                          for (item in items) {
                              it.onNext(item)
                          }
                          it.onComplete()
                      }
                      .onFailure { message ->
                          it.onError(Exception(errorString))
                      }
                      .build()
              loader.loadAd(context)
          }
      }
      

      Observableの購読

      生成したObservableを購読し、UIを更新します。

        //val articles: MutableList<Any>
        //val adapter: ListAdapter // for RecyclerView
        
        val observable = createAdObservable(context, spotId, count, positions)
        observable.subscribe(
                object : DisposableObserver<RFPInstreamInfoModel>() {
                    override fun onNext(item: RFPInstreamInfoModel) {
                        articles.add(item.position(), item)
                    }
        
                    override fun onComplete() {
                        Log.d(TAG, "Completed!")
                        adapter.submitList(articles)
                    }
        
                    override fun onError(e: Throwable) {
                        Log.d(TAG, "Error!", e)
                    }
                }
        )