Как разместить Observables в независимых классах жизненного цикла?

У меня есть класс уведомлений об изменении сети на основе 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 в конце метода, или мне нужно расположить эту переменную где-нибудь еще, и это мой Dao;

@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertStore(stores: Stores): Completable 

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() ничего не возвращает. В Котлин вернется Unit Итак val disposable просто будет Unit,

Другие вопросы по тегам