RxJava zip运算符可在后台进行15个以上的网络通话

时间:2018-06-28 18:27:36

标签: android rx-java retrofit2 rx-java2 rx-android

    private fun getAllFollowers(user: User){
    val items = user.items
    val requests = ArrayList<Observable<List<Followers>>>()
    for (item in items!!.iterator()) {
        requests.add(AutoCompleteApiProvider.getFollowersList(item.followersUrl))
    }
    //here ZIP is not resolving
    Observable.zip(requests, Function<ArrayList<Followers>,java.util.ArrayList<java.util.ArrayList<Followers>>>(){
        var allResponse = java.util.ArrayList<java.util.ArrayList<Followers>>()
        allResponse.add(it)
        return@Function allResponse
    })
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(Action1<ArrayList<ArrayList<Followers>>> { time -> Log.d(TAG, "I will call adapter here") },
                    Action1<Throwable> { throwable ->  Log.d(TAG, "error handing part here")})

}

此处zip运算符无法解析。我不确定我是否将正确的参数传递给zip运算符。

我要执行以下任务。 使用GitHub API按用户名搜索用户(按 关注者数量)并在RecyclerView中显示结果

因此,当用户在editText中键入内容时,我正在调用Github API,该API提供了用户名建议,但我想根据每个名称具有的关注者数量对该名称进行排序。 为了让关注者计数,我需要使用userName进行单独的Github API调用,因为查询参数和API将使用followers对象进行响应。我将数此关注者对象。

这里最棘手的部分是搜索建议API是否为30个用户提供响应。 我将不得不并行进行30次网络调用,并且必须等到每个API调用的响应为止。一旦我收到30条回复,我就会计算每个用户的关注者并进行关注者明智的排序,并在recyclerview中显示结果

所以一旦我有用户名建议。我使用rxJava ZIP运算符进行API调用以获取关注者。 我正在制作Observable<List<Followers>>的列表,并将此列表传递给zip运算符,这是我的问题,我应该在zip运算符中将哪个函数作为第二个参数传递。有什么建议吗?

其余代码已完成,但我遇到了zip操作符。

1 个答案:

答案 0 :(得分:0)

  variable requests is a ArrayList of observable
  val observableFun = Observable.zip(requests, Function<Array<Any>,
            HashMap<ItemsItem, ArrayList<Followers>>> { t ->
       /* write your own logic to play around combine response of all observalble*/
        return@Function allResponse
    })

并订阅此observableFun。