You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RXJava concat方法不生效求助(Kotlin+LiveData场景)

嘿,我来帮你捋清楚这个问题的根源,再给你对应的解决方案~

问题出在哪?

你现在用的Observable.concat是用来拼接多个Observable发射的事件,而不是直接拼接列表里的元素。你的代码里,Observable.just(DummyContent.COMPANIES)会把整个4元素列表作为单个事件发射,所以concat会先发射第一个列表,再发射第二个列表——这就导致subscribe里的onNext会被调用两次,每次收到的都是4个元素的列表。

而你每次调用companiesLiveData.value = it都会覆盖之前的值,所以最后LiveData里只保留了第二次发射的4个元素,这就是为什么你看不到8个元素的原因。

两种解决方案,看你需求选

方案1:合并成一个8元素的列表(一次性发射)

如果你的目标是得到一个包含所有8个元素的合并列表,并且只触发一次LiveData更新,那可以把每个列表拆成单个元素再合并:

disposables.add(
    Observable.concat(
        Observable.fromIterable(DummyContent.COMPANIES),
        Observable.fromIterable(DummyContent.COMPANIES)
    )
    .toList()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe({ mergedCompanies ->
        Timber.d("get merged companies success ${mergedCompanies.size}") // 这里会打印8
        companiesLiveData.value = mergedCompanies
    }, { t ->
        Timber.e(t, "get companies error")
    })
)

原理是:Observable.fromIterable会把列表里的每个元素逐个发射,concat会先发射第一个列表的所有元素,再发射第二个列表的所有元素,最后toList()把这些零散的元素重新收集成一个8元素的列表。

方案2:保留两次发射,同时累加结果到LiveData

如果你的目标是保持concat的原有行为(两次发射4元素列表),同时让LiveData最终包含8个元素,那需要在onNext里累加列表,而不是直接覆盖:

// 先给LiveData初始化一个空列表
companiesLiveData.value = mutableListOf()

disposables.add(
    Observable.concat(Observable.just(DummyContent.COMPANIES), Observable.just(DummyContent.COMPANIES))
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe({ newCompanies ->
            Timber.d("get companies success ${newCompanies.size}") // 会打印两次4
            // 把新列表的元素加到现有LiveData的列表中
            val currentList = companiesLiveData.value?.toMutableList() ?: mutableListOf()
            currentList.addAll(newCompanies)
            companiesLiveData.value = currentList
        }, { t ->
            Timber.e(t, "get companies error")
        })
)

这样第一次发射后LiveData有4个元素,第二次发射后就会累加为8个,同时LogCat也会按你的期望打印两次日志。

内容的提问来源于stack exchange,提问作者programadorloco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:26:50