【问题标题】:Not call subscribe() for PublishSubject不为 PublishSubject 调用 subscribe()
【发布时间】:2020-11-29 03:49:51
【问题描述】:

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 =

【问题讨论】:

    标签: android mvvm rx-java2


    【解决方案1】:

    发生这种情况是因为您在没有观察者的情况下使用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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多