首页 > 解决方案 > 如何使用 RxJava 从可流动对象中获取对象列表

问题描述

我有 2 个数据类:

GitResult

data class GitResult (

    @SerializedName("total_count")
    @Expose
    var total_count: Int,

    @SerializedName("incomplete_results")
    @Expose
    var incomplete_results: Boolean,

    @SerializedName("items")
    @Expose
    var items: MutableList<ItemList>
){}

项目列表

data class ItemList (

    @SerializedName("id")
    @Expose
    var id: Int,

    @SerializedName("name")
    @Expose
    var name: String,

    @SerializedName("language")
    @Expose
    var language: String?,

    @SerializedName("description")
    @Expose
    var description: String?,

    @SerializedName("html_url")
    @Expose
    var html_url: String?
){}

通过改造,我打电话:

 @GET("repositories")
    fun getAllRepo2(@Query("q") q: String? ,
                   @Query("sort") sort: String? ,
                   @Query("order") order: String?
    ) : Observable<GitResult>

然后将它作为 Flowable 对象返回给我的 viewModel 类。

 val ResultFromApiCall_flowable =  mainRepository.fetchToDosFromServer(filterDate, filterStatus, filterName)

所以,现在我有一个GitResult的可流动对象。但是如何同时使用 RxJava获取ItemList对象的列表。

我尝试使用地图运算符:

    var lst = mutableListOf<ItemList>()

    var yy = ResultFromApiCall_flowable.map {//it = gitResult
            gitResult ->

            gitResult.items.forEach {
               lst.add(it)
            }
         lst

    } // returns Observable<MutableList<ItemList>>


     yy.observeOn(AndroidSchedulers.mainThread()).subscribeOn(AndroidSchedulers.mainThread()).subscribe { //it:MutableList<ItemList>

        object: Observer<MutableList<ItemList>>{
        override fun onComplete() {
            Log.d("myLog","------------test3 ")
        }

        override fun onSubscribe(d: Disposable) {}


        override fun onError(e: Throwable) { }

        override fun onNext(t: MutableList<ItemList>) {
            Log.d("myLog","------------test3 $t")
        }


    }}

但似乎它不起作用。我该如何解决?

标签: androidrx-java

解决方案


您正在主线程上进行网络调用,将其 更改subscribeOn(AndroidSchedulers.mainThread())subscribeOn(Schedulers.io())

 yy.observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe { //it:MutableList<ItemList>

        object: Observer<MutableList<ItemList>>{
        override fun onComplete() {
            Log.d("myLog","------------test3 ")
        }

        override fun onSubscribe(d: Disposable) {}


        override fun onError(e: Throwable) { }

        override fun onNext(t: MutableList<ItemList>) {
            Log.d("myLog","------------test3 $t")
        }


    }}

推荐阅读