Как изменить "RoomDatabase и Retrofit" в RxJava - PullRequest
1 голос
/ 23 декабря 2019

Я использую шаблон репозитория.
Я хотел бы реализовать логику, которая, если во внутренней БД нет значения, возвращает значение Ответа API и вставляет его во внутреннюю БД.

Полученное значение внутренней БД (один тип)
Вернуть окончательное значение, если найдено, Запросить серверный API, если не найдено
Вставить во внутреннюю БД (Завершаемый тип)
Вернуть окончательное значение (Единый тип)

Если любой из этихпроцессы вызывают onError, окончательное возвращаемое значение этой логики должно быть onError.

fun getAllStudent(): Single<List<StudentEntity>> =
        cache.getAllStudent().onErrorResumeNext { getAllStudentRemote() }

private fun getAllStudentRemote(): Single<List<StudentEntity>> =
        remote.getAllMember()
            .map { memberData -> memberData.students }
            .map { studentList -> studentList.map { student -> studentMapper.mapToEntity(student) } }
            .doOnSuccess { studentEntityList -> cache.insertStudents(studentEntityList) }

Вот как я пытался.
Тем не менее, в разделе вставки, поскольку он не может подписаться, он не может вставить во внутреннюю БД или обнаружить onError.

Как я могу реализовать эту логику?
++ Извините за мой плохой английский.

...