不为 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
}
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
}