如何从Observable <Observable <List <ResponseAllPhotos.Response >>>打印排放?

时间:2019-07-10 15:51:27

标签: android kotlin observable rx-java2

在下面的代码中,我通过改造提出了HTTP请求。如下所示,方法getAllPhotos()返回Observable<List<ResponseAllPhotos.Response>> 我要实现的是,有一个在日志语句中发出url,title,thumbnailUrl和下面所示数据类中的所有值的订阅者。

在下面发布的代码部分中,我尝试显示数据类中存在的上述值,但是subscribe方法中的日志从不显示。

代码

//first attempt
/*var e = setupCommRequestService()?.
    flatMap {
        it.map {
            Observable.fromIterable(it)
                /*.map {
                    it
                }
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe {
                    r->Log.i(LOG_TAG, "" + r.title)
                }*/
        }
    }*/

    //second attempt
    var e = setupCommRequestService()?.
        flatMap {
            it
        }

    var r = e?.map { 
        it
    }

    var t = r?.map { 
        Observable.fromIterable(it)
            .map { 
                it
            }
    }

    var z = t?.observeOn(AndroidSchedulers.mainThread())
        ?.subscribeOn(Schedulers.io())
        ?.subscribe {
                r->Log.i(LOG_TAG, "" + r.url)//never works
        }

界面

Interface CommunicationRequestService {

@GET("/photos")
fun getAllPhotos(): Observable<List<ResponseAllPhotos.Response>>

companion object {
    fun initRetrofit(ctx : Context) : Single<CommunicationRequestService>? {
        return Single.just(
            Retrofit.Builder()
                .addCallAdapterFactory(
                    RxJava2CallAdapterFactory.create()
                )
                .addConverterFactory(
                    GsonConverterFactory.create()
                )
                .baseUrl(ctx.getString(R.string.BASE_URL))
                .build())
            .flatMap { retrofit -> Maybe.just(retrofit)
                .map { it-> it.create(CommunicationRequestService::class.java) }
                .toSingle()
            }
    }
}
}

模型

public object ResponseAllPhotos {
data class Response(val albumId : Int,val id : Int,val title : String,val url : String,val thumbnailUrl : String)

1 个答案:

答案 0 :(得分:0)

可以像这样简单地完成:

var disposable = setupCommRequestService()?.
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeOn(Schedulers.io())
                .subscribe {
                    r.forEach {Log.i(LOG_TAG, "" + it.title + "...") }
                }*/
        }
    }

在此示例中,您将在“订阅”中获得列表,因此可以像普通的kotlin std列表一样踩它。