将数据从 BroadcastReceiver 传递到 ViewModel 或 Repository
Pass data from BroadcastReceiver to ViewModel or Repository
我正在尝试发送我在视图模型或存储库中的广播(在清单中注册)中收到的数据并不是特别重要,我尝试通过实时日期和 RxJava2 来完成,但是广播中有数据 class 我可以看到,但它不会进入视图模型或存储库,谢谢。
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:
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")
})
}}
经过多次尝试,我发现 liveData 有效,所以也许有人会需要它。 RxJava 仍然没有,我还不知道为什么。
我正在尝试发送我在视图模型或存储库中的广播(在清单中注册)中收到的数据并不是特别重要,我尝试通过实时日期和 RxJava2 来完成,但是广播中有数据 class 我可以看到,但它不会进入视图模型或存储库,谢谢。
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:
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")
})
}}
经过多次尝试,我发现 liveData 有效,所以也许有人会需要它。 RxJava 仍然没有,我还不知道为什么。