cannot resolve the defined Disposable

179 Views Asked by At

having a function query data from database and returning a Flowable

       @Dao
        interface DataDao {
            @Query("SELECT * FROM DataTable ORDER BY `order`")
            fun listenToAll():Flowable<List<DataRoomEntity>>
        }

and when subscribe to it, the disposable is not resolved (see the screenshot).

        var dataDao: DataDao
        fun listenToDataDb(): Flowable<Data> = dataDao.listenToAll()
                .map { convertEntitiesToData(it) }

        fun getData(){
            //var disposable: Disposable? = null
            var disposable = listenToDataDb()
                    .subscribe({ data ->
                            // do something with data
                            disposable?.dispose() //<== disposable is unresolved
            }, { throwable ->
                    disposable?.dispose(). //<== disposable is unresolved
            })
        }
    }

but if do define the var disposable: Disposable = null first it is fine

fun test(){
            var disposable: Disposable? = null
            disposable = listenToDataDb()
                    .subscribe({ data ->
                            // do something with data
                            disposable?.dispose() //<=== it is fine
            }, { throwable ->
                    disposable?.dispose()
            })
        }

why it gets unresolved error if not define it first?

enter image description here

1

There are 1 best solutions below

2
On

A Disposable is a stream or a link between an Observable and an Observer. You can declare globally like below

       lateinit var disposable: Disposable

Then

       if(!disposable.isDisposed){
         disposable.dispose()
        }