Детально я всё не вычитывал (может потом ещё на это время выделю), пока в общих чертах/что сильно бросилось в глаза:
OkHttp крута, но можно взять сразу Retrofit, чтобы самому не париться с конверсией, построением запроса и т д. (ещё оттуда сразу можно получать RxJava классы, чтобы не париться с тредингом и выкинуть асинк таски)
У QuestionDao почему-то часть методов реактивная (с Single), а часть блокирующая
Всё ещё есть какие-то странные Serializable синглетоны со стейтом и сохранение данных в шаредпрефы в жсон. Ты придумал, в какую сторону будешь от этого избавляться?
Детально я всё не вычитывал (может потом ещё на это время выделю), пока в общих чертах/что сильно бросилось в глаза:
.source()
вместо того, чтобы InputStream потом в него 10 раз заворачивать (т.к. moshi и OkHttp из одной компании они подогнаны друг под друга хорошо), а ещё, как верно подсказывает идея, response body может быть null если что-то пошло не так.