不为 PublishSubject 调用 subscribe()

Not call subscribe() for PublishSubject

Android Studio 5,RxJava2

在我的 Activity:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Debug.d(TAG, "onCreate: savedInstanceState = $savedInstanceState")
        setContentView(R.layout.films_rx_java_activity)
        binding = FilmsRxJavaActivityBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
        val listType: ListTypeEnum = intent.getSerializableExtra(LIST_TYPE) as ListTypeEnum
        initLogic()
    }
private fun initLogic() {

    val viewModelProvider = ViewModelProviders.of(this)
    filmsRxJavaViewModel = viewModelProvider.get(FilmsRxJavaViewModel::class.java)
        var dispose = filmsRxJavaViewModel.isShowProgress
            .subscribe { it ->
                Debug.d(TAG, "initLogic: isShowProgress = $it")
            }
    }

在我的 ViewModel 中:

      import io.reactivex.subjects.PublishSubject

 class FilmsRxJavaViewModel(application: Application) : AndroidViewModel(application) {
        var isShowProgress: PublishSubject<Boolean> = PublishSubject.create()
        
            init {
                Debug.d(TAG, "init:")
                isShowProgress.onNext(true)
                loadData()
            }
        
            fun loadData() {
                Debug.d(TAG, "loadData")
                isShowProgress.onNext(false)
            }

在logcat中:

myRxJavaViewModel(16488): init:
myRxJavaViewModel(16488): loadData

为什么不在我的 Activity 中调用 .subscribe {。结果打印

initLogic: isShowProgress =

发生这种情况是因为您在没有观察者的情况下使用 isShowProgress.onNext(true) 发射。

你需要先观察,然后再发射东西

像这样尝试

private fun initLogic() {
    val viewModelProvider = ViewModelProviders.of(this)
    filmsRxJavaViewModel = viewModelProvider.get(FilmsRxJavaViewModel::class.java)
        var dispose = filmsRxJavaViewModel.isShowProgress
            .subscribe { it ->
                Debug.d(TAG, "initLogic: isShowProgress = $it")
            }
    filmsRxJavaViewModel.loadData() // Add this line
}