不为PublishSubject调用subscribe()



Android Studio 5,RxJava2

在我的活动中:

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

为什么不在我的"活动"中调用.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
}

最新更新