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
}