我有一个基于ConnectivityManager.NetworkCallback
的网络更改通知程序类,我想在网络可用时更新某些字段;
override fun onAvailable(network: Network?) {
super.onAvailable(network)
val db = StoreDatabase.getInstance(context)
val stores = db.createStores()
val disposable = stores.insertStore(Stores(storeName = "testOnAvailableNetInsertions", status
= AppConstants.Database.SYNC_FAIL))
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io()).subscribeWith(object : DisposableCompletableObserver() {
override fun onComplete() {
if (!isDisposed)
dispose()
}
override fun onError(e: Throwable) {
if (!isDisposed)
dispose()
}
}).dispose()
可以在方法末尾调用dispose吗,还是我必须将该变量放置在其他地方, 这是我的道;
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertStore(stores: Stores): Completable
答案 0 :(得分:1)
请注意,在调用onComplete
或onError
之后,无需显式释放订阅。观察者收到任何终止事件后将被取消订阅。因此,您可以尝试的一件事是:
super.onAvailable(network)
val db = StoreDatabase.getInstance(context)
val stores = db.createStores()
stores.insertStore(Stores(storeName="testOnAvailableNetInsertions",
status=AppConstants.Database.SYNC_FAIL))
.subscribeOn(Schedulers.io())
.subscribe()
在链的末尾调用.dispose()
将立即处理该预订,并且在大多数情况下没有太大意义。由于您的订户在技术上不会做很多事情,因此它可能只对您有用,但是我不确定。另外,.dispose()
不返回任何内容。在Kotlin中,它将返回Unit
,因此val disposable
只会是Unit
。