この項ではRxJavaを用いた実装例を紹介します。
通常の実装と同じくSDKの初期化を行います。
RFP.init(context, mediaId)
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を購読し、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)
}
}
)