Как получить callback на том же потоке где был запрос (Retrofit)?

Проблема в том, что не важно на в каком потоке был сделан запрос, колбек будет возвращен на main потоке. Можно сделать так, чтоб колбеки прилетали в бекграунд, но для этого нужно изменить конфигурацию как описано в этом ответе: https://stackoverflow.com/a/41370867/5709159

...
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(/* your url */)
        .callbackExecutor(Executors.newSingleThreadExecutor())  <--- THIS LINE
        // other builder options...
        .build();
...

но тогда все колбеки будут прилетать в бекграунд, а мне нужно, чтоб я мог контролировать какие колбеки прилетают в бекграунд, а какие в main и для этого было бы очень удобно получать колбек на том же потоке на котором был сделан запрос, но такой опции я не вижу.

Вопрос, как сделать так, чтоб можно было определять перед запросом на каком потоке получить колбек? Не хочется иметь две конфигурации Retrofit (как описано выше) одну с указанием на бекграунд, а вторую дефолтную.


Ответы (1 шт):

Автор решения: woesss

Когда нужно получить ответ в главном (или заданном в конфигурации) потоке используйте асинхронный запрос с колбеком

call.enqueue(callback);

Когда нужно получить ответ в вызывающем потоке используйте синхронный (блокирующий) запрос

try {
    Response<T> response = call.execute();
    // onResponse equivalent
    ...
} catch (Throwable t) {
    // onFailure equivalent
    ...
}
→ Ссылка