Как распечатать выбросы из Observable <Observable <List <ResponseAllPhotos.Response >>>? - PullRequest
0 голосов
/ 10 июля 2019

В приведенном ниже коде я делаю http запрос через модернизацию.как показано ниже, метод getAllPhotos () возвращает Observable<List<ResponseAllPhotos.Response>>, чего я хочу добиться - иметь подписчика, который генерирует в операторах журнала, URL-адрес, заголовок, thumbnailUrl и все значения в классе данных, показанном ниже.

в разделе кода, размещенном ниже, я пытаюсь отобразить вышеупомянутые значения, которые существуют в классе данных, но журналы в методе подписки никогда не отображаются.

код :

//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
        }

интерфейс

интерфейс 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 голосов
/ 10 июля 2019

Можно сделать просто так:

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

В этом примере вы получите список подписки, так что вы можете просто сделать это как обычный список kotlin std.

...