【发布时间】:2023-03-18 06:09:01
【问题描述】:
我面临 SharedPreferences 问题。我想知道如何在 Retrofit 中调用 SharedPreferences。我的意思是,我有以下文件:
@Module
class NetworkModule {
@Provides
internal fun provideGson(): Gson {
return GsonBuilder().create()
}
@Provides
internal fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder().addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder().addHeader("Accept", "application/json")
val request = requestBuilder.method(original.method(), original.body()).build()
chain.proceed(request)
}.build()
}
@Provides
internal fun provideRetrofit(gson: Gson, okHttpClient: OkHttpClient): Retrofit {
return Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(BASE_URL)
.client(okHttpClient)
.build()
}
}
在我的 Presenter 中,我有以下代码:
override fun getSavedToken() {
mToken = mSharedPreferences.getString(TOKEN, TOKEN_UNAVAILABLE)
}
...
inner class GetAccessTokenSubscriber : ResourceObserver<AccessTokenBean>() {
override fun onNext(@NonNull accessToken: AccessTokenBean) {
mSharedPreferences.edit().putString(TOKEN, accessToken.token).apply()
getInformation()
}
override fun onError(@NonNull e: Throwable) {
mView?.displayError()
}
override fun onComplete() {
// Nothing to do
}
}
目前,为了设置令牌,我将 Bearer $token 放入我的存储库/服务中
// Repository
val newToken = "Bearer $token"
return mService.getInfos(newToken)
// Service
fun getInfos(@Header("Authorization") token: String
我想知道如何将 Bearer + 令牌放入我的 NetworkModule 文件中?
感谢您的宝贵时间。
【问题讨论】:
-
模块不用于存储数据,模块仅用于依赖图
-
我要做的就是创建一个拦截器吧?
-
你的 sharedPreferences 是 dagger 提供的吗?
-
Singleton 在我的 applicationModule 中提供有趣的 provideSharedPreferences(context: Context): SharedPreferences { return PreferenceManager.getDefaultSharedPreferences(context) }
-
好的,我正在写一个答案而不是
标签: android kotlin sharedpreferences retrofit retrofit2