Как прокомментировал coroutineDispatcher, вы должны передать общие предпочтения в конструктор перехватчика и сохранить ссылку на них.
Попробуйте это:
class ServiceInterceptor(private val prefs: SharedPreferences): Interceptor {
val token: String get() = prefs.getString("token")
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
if(request.header("No-Authentication") == null){
if (request.url.toString().contains("/user/signin") === false) {
// Add Authorization header only if it's not the user signin request.
request = token
.takeUnless { it.isNullOrEmpty }
?.let {
request.newBuilder()
.addHeader("Authorization", "Bearer $it")
.build()
}
?: request
}
}
return chain.proceed(request)
}
}
Перехватчик теперь получает ссылкук общим настройкам, чтобы зависимость была инвертирована, и это может позволить легко тестировать, помечая переданные SharedPreferences.
И это может быть реализовано следующим образом:
ServiceInterceptor(PreferenceManager.getSharedPreferences())