我正在使用 PreferenceScreen 来设置我想在我的改造 API 服务中使用的身份验证密钥和 url。因此,要获取身份验证密钥,我需要访问我的 API 服务中的 SharedPreferences。但要做到这一点,我需要一个上下文。如何将上下文传递给我的改造实例?
这是我的 API 服务:
private val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(???)
private val BASE_URL = sharedPreferences.getString("api_url","")
private val TTN_KEY = sharedPreferences.getString("access_key","")
private val loggingInterceptor: HttpLoggingInterceptor =
HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val originalRequest = chain.request()
val newRequest = originalRequest.newBuilder()
.addHeader("Authorization", "key $TTN_KEY")
.build()
chain.proceed(newRequest)
}
.addInterceptor(loggingInterceptor)
.build()
private val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(MoshiConverterFactory.create())
.client(okHttpClient)
.build()
interface TTNApiService {
@GET("devices")
suspend fun getDevices(): List<String>
@GET("query/{device-id}")
suspend fun getDeviceValues(@Path("device-id") id: String): List<NetworkValue>
@GET("query")
suspend fun getValues(): List<NetworkValue>
}
// public object used to access the retrofit instance
object TTNApi {
val retrofitService: TTNApiService by lazy {
retrofit.create(TTNApiService::class.java)
}
}