Как получить 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 шт):
Когда нужно получить ответ в главном (или заданном в конфигурации) потоке используйте асинхронный запрос с колбеком
call.enqueue(callback);
Когда нужно получить ответ в вызывающем потоке используйте синхронный (блокирующий) запрос
try {
Response<T> response = call.execute();
// onResponse equivalent
...
} catch (Throwable t) {
// onFailure equivalent
...
}