【问题标题】:Pass data from BroadcastReceiver to ViewModel or Repository将数据从 BroadcastReceiver 传递到 ViewModel 或 Repository
【发布时间】:2020-08-07 13:59:42
【问题描述】:

我正在尝试发送我在视图模型或存储库中的广播(在清单中注册)中收到的数据并不是特别重要,我尝试通过实时日期和 RxJava2 来完成它,但是那里是广播类中的数据,我可以看到,但它没有出现在视图模型或存储库中,谢谢。

class MyBroadcastReceiver  : BroadcastReceiver() {

private val dataList = MutableLiveData<ArrayList<Words>>()
private var observer: Observable<ArrayList<Words>> = Observable.just(arrayListOf())

@SuppressLint("CheckResult")
override fun onReceive(context: Context?, intent: Intent?) {



    val arrayObject =
        intent?.extras?.getParcelableArrayList<Words>("KEY") as ArrayList<Words>?
   
    dataList.postValue(arrayObject)

    arrayObject.let { dataList.postValue(it) }

    arrayObject.let { observer = Observable.just(it) }

    observer = Observable.create { emitter: ObservableEmitter<ArrayList<Words>> ->
            emitter.onNext(arrayObject!!)
            emitter.onComplete()
        }
}

fun getDataList() : LiveData<ArrayList<Words>> = dataList

fun getDataListRx() : Observable<ArrayList<Words>> = observer
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
}

ViewModel 类:

class MyViewModel(
private val broadcastReceiver: MyBroadcastReceiver,
private val activity: DaggerActivity) : ViewModel() {

init {
    test()
}

@SuppressLint("CheckResult")
private fun test() {
    broadcastReceiver.getDataListRx()?.subscribe({
        Log.d("WAS_INTENT", "DateRepSuccess")

    },{
        Log.d("WAS_INTENT", "DateRepError")

    })

    broadcastReceiver.getDataList().observe(activity, Observer {
        Log.d("WAS_INTENT", "DateRepSuccessLiveData")

    })
}}

【问题讨论】:

    标签: android kotlin mvvm broadcastreceiver viewmodel


    【解决方案1】:

    经过多次尝试,我发现 liveData 有效,所以也许有人会需要它。 RxJava 还是不行,我还不知道为什么。

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多