Android Room with RxJava handle empty query result

Nikita Unkovsky picture Nikita Unkovsky · May 27, 2017 · Viewed 8.5k times · Source

Trying to test new Android Room librarty with RxJava adapter. And I want to handle result if my query returns 0 objects from DB:

So here is DAO method:

@Query("SELECT * FROM auth_info")
fun getAuthInfo(): Flowable<AuthResponse>

And how I handle it:

        database.authDao().getAuthInfo()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .switchIfEmpty { Log.d(TAG, "IS EMPTY") }
            .firstOrError()
            .subscribe(
                    { authResponse -> Log.d(TAG, authResponse.token) },
                    { error -> Log.d(TAG, error.message) })

My DB is empty, so I expect .switchIfEmty() to work, but none of handling methods is firing. Neither .subscribe() nor .switchIfEmpty()

Answer

yigit picture yigit · May 27, 2017

Db Flowables are observable (so they keep dispatching if database changes) so it never completes. You can try returning List<AuthResponse>. We've considered back porting an optional but decided not to do it, at least for now. Instead, we'll probably add support for Optional in different known libraries.