Как разместить Observables в независимых классах жизненного цикла? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть класс уведомлений об изменении сети, основанный на 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 

1 Ответ

0 голосов
/ 28 февраля 2019

Обратите внимание, что вам не нужно явно удалять подписки после вызова 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.

...